`
javaliulang
  • 浏览: 2104 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

存储过程批量修改

阅读更多
不知道为什么,在调用这个存储过程的时候老获取不到应用程序传过来的值。
不多说,直接贴代码
类型创建:
drop type irms_type_ma_table;
drop type irms_type_ma ;
create or replace type irms_type_ma as object (
       user_order_id            varchar2(20),
       in_res_attribute_code    varchar2(50),
       res_value                varchar2(50),
       req_user                 varchar2(20),
       req_date                 varchar2(20),
       op_user                  varchar2(20)
);
CREATE OR REPLACE TYPE irms_type_ma_table AS table OF irms_type_ma ;


存储过程创建:
create or replace procedure proc_modifyattribute(params in irms_type_ma_table,outp out varchar2)
as
       tmp_user_order_id            varchar2(20);                  --入参user_order_id
       tmp_in_res_attribute_code    varchar2(50);                  --入参in_res_attribute_code
       tmp_res_table_column_value   varchar2(50);                  --入参tmp_res_table_column_value
       tmp_product_id               rt_UserOrder_info.product_id%type;
       tmp_net_type_id              rt_UserOrder_info.net_type_id%type;
       tmp_in_busi_res_kind_code    rt_ResReturnConfig_dict.in_busi_res_kind_code%type;
       tmp_in_atom_res_value        rt_ResReturnConfig_dict.in_atom_res_value%type;
       tmp_in_res_table             rt_ResReturnConfig_dict.in_res_table%type;
       tmp_in_res_table_pk          rt_ResReturnConfig_dict.in_res_table_pk%type;
       tmp_in_res_table_column      rt_ResReturnConfig_dict.in_res_table_column%type;
       tmp_res_id                   rt_WorkRes_info.res_id%type;
       tmp_atom_res_kind_code       rt_WorkAtomRes_info.atom_res_kind_code%type;
       tmp_value                    rt_WorkAtomRes_info.value1%type;  --资源值
       tmp_sql                      varchar2(1000);
       
       cursor curs is select *  from the (
           select cast (params as irms_type_ma_table) from dual
       );
begin
  for  cur in curs loop
  --赋值
  tmp_user_order_id := cur.user_order_id ;
  tmp_in_res_attribute_code := cur.in_res_attribute_code;
  tmp_res_table_column_value := cur.res_value;
  
  outp :=  tmp_user_order_id;
   
  --1.查询出某个用户订单对应的产品ID(product_id)、接入方式(net_type_id)
  dbms_output.put_line('1.查询出某个用户订单对应的产品ID(tmp_product_id)、接入方式(tmp_net_type_id)');
  dbms_output.put_line('start...');

  select
       userorder_info.product_id,userorder_info.net_type_id into tmp_product_id,tmp_net_type_id
  from
       rt_UserOrder_info  userorder_info
  where
       userorder_info.user_order_id = tmp_user_order_id;

  dbms_output.put_line('产品类型为--->'||tmp_product_id);
  dbms_output.put_line('接入方式为--->'||tmp_net_type_id);
  dbms_output.put_line('end...');
  dbms_output.put_line('');
  
  

    /*2.根据产品ID(tmp_product_id)、接入方式(tmp_net_type_id)、资源属性编码(tmp_in_res_attribute_code)
  查询出业务资源种类编码(tmp_in_busi_res_kind_code)、原子资源value (tmp_in_atom_res_value)、资源属性表名称(tmp_in_res_table)、
  资源属性表主键(tmp_in_res_table_pk)、资源属性字段(tmp_in_res_table_column)*/
  dbms_output.put_line('2.根据产品ID(tmp_product_id)、接入方式(tmp_net_type_id)、资源属性编码(tmp_in_res_attribute_code)
  查询出业务资源种类编码(tmp_in_busi_res_kind_code)、原子资源value (tmp_in_atom_res_value)、资源属性表名称(tmp_in_res_table)、
  资源属性表主键(tmp_in_res_table_pk)、资源属性字段(tmp_in_res_table_column)');
  dbms_output.put_line('start...');

  select
        rrcd.in_busi_res_kind_code,
        rrcd.in_atom_res_value,
        rrcd.in_res_table,
        rrcd.in_res_table_pk,
        rrcd.in_res_table_column
        into
        tmp_in_busi_res_kind_code,
        tmp_in_atom_res_value,
        tmp_in_res_table,
        tmp_in_res_table_pk,
        tmp_in_res_table_column
  from
        rt_ResReturnConfig_dict rrcd
  where
        rrcd.product_id = tmp_product_id and
        rrcd.net_type_code  = tmp_net_type_id and
        rrcd.in_res_attribute_code = tmp_in_res_attribute_code;

  dbms_output.put_line('业务资源种类编码为--->'||tmp_in_busi_res_kind_code);
  dbms_output.put_line('原子资源value为--->'||tmp_in_atom_res_value);
  dbms_output.put_line('资源属性表名称为--->'||tmp_in_res_table);
  dbms_output.put_line('资源属性表主键为--->'||tmp_in_res_table_pk);
  dbms_output.put_line('资源属性字段为--->'||tmp_in_res_table_column);
  dbms_output.put_line('end...');
  dbms_output.put_line('');

 
  /*3.根据用户订单号(tmp_user_order_id)和业务资源种类编码(tmp_in_busi_res_kind_code)从来确定资源ID(tmp_res_id)*/
  dbms_output.put_line('3.根据用户订单号(tmp_user_order_id)和业务资源种类编码(tmp_in_busi_res_kind_code)从来确定资源ID(tmp_res_id)');
  dbms_output.put_line('start...');

  select
        wri.res_id into tmp_res_id
  from
        rt_WorkRes_info wri
  where
        wri.user_order_id=tmp_user_order_id and
        wri.res_kind_code=tmp_in_busi_res_kind_code;

  dbms_output.put_line('资源ID为--->'||tmp_res_id);
  dbms_output.put_line('end...');
  dbms_output.put_line('');


  /*4.根据资源ID(tmp_res_id),确定原子资源种类(tmp_atom_res_kind_code)、以及它的资源值*/
  dbms_output.put_line('4.根据资源ID(tmp_res_id),确定原子资源种类(tmp_atom_res_kind_code)、以及它的资源值');
  dbms_output.put_line('start...');

  tmp_sql := 'select wari.atom_res_kind_code,wari.'||tmp_in_atom_res_value||' from rt_WorkAtomRes_info wari where wari.res_id=:1';
  execute immediate tmp_sql into tmp_atom_res_kind_code,tmp_value using tmp_res_id ;

  dbms_output.put_line('原子资源种类为--->'||tmp_atom_res_kind_code);
  dbms_output.put_line('资源值value为--->'||tmp_value);
  dbms_output.put_line('end...');
  dbms_output.put_line('');
  
  
  
  
  /*5.修改资源属性*/
  dbms_output.put_line('5.修改资源属性');
  dbms_output.put_line('start...');
  
  tmp_sql := 'update '||tmp_in_res_table||' set '||tmp_in_res_table_column||'=:1 where '||tmp_in_res_table_pk||'=:2';
  execute immediate tmp_sql using tmp_res_table_column_value,tmp_value ;
  
  
  dbms_output.put_line('修改资源属性成功!');
  dbms_output.put_line('修改之后的资源属性值为--->'||tmp_res_table_column_value);
  dbms_output.put_line('end...');
  dbms_output.put_line('');
  
  end loop;
  commit;
  
  exception
    when others then
         outp := SQLERRM ;
         dbms_output.put_line('执行失败!'||SQLERRM);
end;

分享到:
评论
1 楼 javaliulang 2012-02-16  
我自己灌个水。

相关推荐

    批量修改Oracle序列值的存储过程

    这篇博客分享的是一个自定义的存储过程,用于批量修改Oracle序列的当前值(CURRENT VALUE)。 首先,我们需要理解Oracle序列的基本结构和操作。序列由CREATE SEQUENCE语句创建,如: ```sql CREATE SEQUENCE seq_...

    oracle 存储过程批量提交

    ### Oracle存储过程批量提交知识点详解 在Oracle数据库中,存储过程是一种重要的数据库对象,它可以包含一系列SQL语句和控制流语句,用于实现复杂的业务逻辑处理。存储过程不仅可以提高应用程序性能,还可以确保...

    存储过程批量加密,解密

    ### 存储过程批量加密与解密 #### 一、存储过程加密技术解析 存储过程是一种预先编译好的SQL代码集合,在数据库系统中扮演着重要的角色。它不仅可以提高执行效率,还能增强数据的安全性。而对存储过程进行加密,更...

    oracle数组存储过程批量插入

    在本例中,我们探讨了如何使用数组存储过程进行批量插入和删除。数组在Oracle中的使用通常涉及定义PL/SQL类型,这允许我们创建索引数组以存储特定数据类型。 首先,我们创建一个名为`MSGPAG`的包,其中定义了一个名...

    批量修改表和存储过程的架构

    ### 批量修改表和存储过程的架构 #### 一、概述 在数据库管理与维护过程中,经常会遇到需要批量修改数据库对象(如表或存储过程)所属架构的情况。尤其是在进行数据库迁移、重构或是架构调整时,这种需求更为常见...

    【ASP.NET编程知识】ASP.NET MVC用存储过程批量添加修改数据操作.docx

    ASP.NET MVC 用存储过程批量添加修改数据操作 本文主要介绍了使用 ASP.NET MVC 框架和 Entity Framework 库来批量添加和修改数据的操作。我们知道,在 ASP.NET MVC 中,可以使用 Entity Framework 库来进行数据库...

    SqlServer存储过程及调试指南

    6. 存储过程修改与变更:在对SQLServer存储过程进行修改和变更时,可能会遇到与现有数据库函数冲突的问题,需要掌握正确的方法来进行升级和批量修改,避免造成错误。 7. 异常处理的详细机制:在TRY块中包含潜在失败...

    Oracle 高效分页存储过程(修改)

    本文将深入探讨Oracle数据库中的高效分页存储过程及其修改版。 首先,我们要理解什么是分页查询。分页查询是数据库中的一种查询策略,它将结果集分为多个部分,每次只返回一部分(一页)结果给用户。这通常涉及到两...

    sql存储过程学习,详细的解说存储过程的语法,结构和用法。

    - 当存储过程修改后,应考虑其对已存在的应用程序的影响,因为它们可能依赖于存储过程的行为和输出。 6. **存储过程与其他技术的集成** - ASP中,可以通过ADO(ActiveX Data Objects)调用存储过程,比较两种调用...

    oracle 事务 回滚 存储过程

    当在存储过程中使用事务时,可以更精细地控制数据更改的提交或回滚。例如,在给定的部分内容中,演示了一个名为`TransProc`的存储过程,它接收两个参数并执行两次插入操作。这些插入操作被封装在一个事务`InProc`中...

    sqlserver 批量删除存储过程和批量修改存储过程的语句

    修改: 代码如下: declare proccur cursor for select [name] from sysobjects where name like ‘Foods_%’ declare @procname varchar(100) declare @temp varchar(100) open proccur fetch next from proccur ...

    批量增加测试数据----存储过程

    ### 批量增加测试数据——存储过程 在软件开发与维护的过程中,为了验证...综上所述,通过存储过程批量增加测试数据是一种高效且实用的方法,它不仅可以提高测试效率,还能帮助开发者更好地理解和优化系统的性能表现。

    sql存储过程帮助文档

    存储过程常用于复杂的业务逻辑,如批量数据处理、复杂查询、业务规则实现等。 综上所述,“sql存储过程帮助文档”应该覆盖了这些基本概念和更深入的技巧,包括但不限于游标、异常处理、动态SQL、存储过程的优化等。...

    MySQL实现创建存储过程并循环添加记录的方法

    创建存储过程并循环添加记录是数据库管理中的常见任务,尤其是在需要批量插入数据时。以下将详细解释如何在MySQL中实现这一功能。 首先,我们需要了解存储过程的基本创建方法。在MySQL中,我们使用`CREATE ...

    SQL 2005 如何批量修改表和存储过程的架构.doc

    有时,出于管理和权限分配的需求,我们可能需要将多个表或存储过程的架构进行批量修改。本文将详细介绍如何在SQL Server 2005中批量修改表和存储过程的架构。 首先,我们需要理解SQL Server中的架构概念。架构...

    Oracle定时执行存储过程

    Oracle 定时执行存储过程 ... Oracle 定时执行存储过程提供了一个灵活的方式来执行存储过程,包括更新工作状态、更改工作设置、设置重执行频度、提交工作、设定执行时间、删除工作和立即执行工作等多种操作。

    ORCAL存储过程(一)

    3. **事务处理**:在存储过程中,可以通过`COMMIT`语句来提交事务,确保数据的更改永久保存在数据库中。这在批量操作或复杂数据修改场景中尤为重要。 ```sql commit; ``` #### 调用存储过程 一旦存储过程创建...

    SqlServerCH创建和管理存储过程PPT学习教案.pptx

    首先,存储过程提供了批量处理的能力,允许一次性执行多条SQL语句,这对于数据操作来说非常高效。此外,存储过程还能使用变量(包括局部变量和全局变量)来存储中间结果,利用控制流语言如`if...else`和`while`等...

    MySQL存储过程:批量操作的高效利器

    ### MySQL存储过程:批量操作的高效利器 #### 一、MySQL概述 MySQL 是一个非常流行的开源关系型数据库管理系统(RDBMS),它以其强大的功能、可靠性和灵活性在Web应用程序领域中占据着重要的地位。MySQL 基于结构...

Global site tag (gtag.js) - Google Analytics