`

oracle存储过程之游标查询,一维和二维数组,循环,条件判断例子

阅读更多
create or replace procedure init_permission(custId   IN varchar) is

  permId varchar(20);
  counter BINARY_INTEGER;
begin

  ---------------------------------------------

  DECLARE

--定义许可记录类型
TYPE type_permission IS RECORD
( appid varchar(1),domain varchar(20),action varchar(40),descript varchar(100));

--定义许可二维数组类型
TYPE type_permission_array IS TABLE OF type_permission
INDEX BY BINARY_INTEGER;

--定义字符串一维数组类型
TYPE type_str_array IS TABLE OF varchar(30) INDEX BY BINARY_INTEGER;


--创建许可二维数组
permArr type_permission_array;
--创建许可记录
perm type_permission;

--创建账户ID数组
acctIdArr type_str_array;

--创建用户ID数组
userIdArr type_str_array;


--初始化数组
begin

--初始化许可二维数组
---
perm.appid:=2;
perm.domain:='transfer';
perm.action:='00901';
perm.descript:='付款到关联账户';

permArr(1) := perm;

---
perm.appid:=2;
perm.domain:='transfer';
perm.action:='00700';
perm.descript:='付款到银行-单笔发起';

permArr(2) := perm;


--初始化账户ID数组
--定义查询账户ID游标
DECLARE cursor acctCursor(custId varchar) is
select  a.acct_id,a.acct_name from acps_acct_mast a where a.cust_id=custId;
begin

--循环读取账户ID游标,并初始化账户ID数组
counter:=1;
for acct in acctCursor(custId) loop
acctIdArr(counter):=acct.acct_id;
counter:=counter+1;
end loop;
--结束循环

end;
--结束定义账户ID游标



--初始化用户ID数组
--定义查询用户ID游标
DECLARE cursor userCursor(custId varchar) is
select t.user_id,t.oper_id from user_info t where t.cust_id=custId;
begin

--循环读取用户ID游标,并初始化用户ID数组
counter:=1;
for usr in userCursor(custId) loop
userIdArr(counter):=usr.user_id;
counter:=counter+1;
end loop;
--结束循环

end;
--结束定义用户ID游标









--循环许可二维数组
FOR i IN 1 .. permArr.count LOOP

--循环账户ID数组
FOR j IN 1 .. acctIdArr.count LOOP

--获取许可ID
select security_permission_id_seq.nextval into permId from dual;


--插入该账户的许可
insert into security_permission
  (PERMISSION_ID,
   ACTION,
   INSTANCE,
   APPID,
   DOMAIN,
   DESCRIPTION,
   CREATED_TS,
   LAST_UPD_TS,
   LAST_UPD_TRANCODE)
values
  (permId,
   permArr(i).action,
   acctIdArr(j),
   permArr(i).appid,
   permArr(i).domain,
   permArr(i).descript,
   sysdate,
   sysdate,
   '');


--循环用户ID数组
FOR k IN 1 .. userIdArr.count LOOP

--插入用户与许可关联记录
insert into security_user_permission (SQ, USER_ID, PERMISSION_ID, DESCRIPTION, CREATED_TS, LAST_UPD_TS, LAST_UPD_TRANCODE)
values (SECURITY_USER_PERMISSION_SEQ.Nextval, userIdArr(k), permId, '', sysdate, sysdate, '');



end loop;
--结束循环用户ID数组

end loop;
--结束循环账户ID数组

end loop;
--结束循环许可二维数组







end;
--结束数组初始化





  ---------------------------------------------

end;






-----------------------------
--call init_permission('fhwc2');

 

create or replace procedure init_corp(custId   IN varchar,
                                      custName IN varchar) is

  acctId varchar(20);
  email  varchar(30);
begin

  ---------------------------------------------
  --企业邮箱
  email := custId || '@sys.com';

  --创建1个企业客户
  register_cust_corp(custId, custName, email);

  --创建3个不同角色的企业用户
  register_user(email,
                '001',
                custId || '业务员',
                '22',
                custId);
  register_user(email,
                '101',
                custId || '财务员',
                '21',
                custId);
  register_user(email,
                '999',
                custId || '管理员',
                '20',
                custId);

  --定义一维数组
  declare

    TYPE my_array IS TABLE OF varchar(30) INDEX BY BINARY_INTEGER;
    --创建权限数组
    txnCds my_array;

  BEGIN
    --初始化权限数组
    txnCds(1) := '00700';
    txnCds(2) := '00900';
    txnCds(3) := '00901';
    txnCds(4) := '00100';
    txnCds(5) := '00500';
    txnCds(6) := '00800';

    --创建账户

    --循环创建三个账户
    FOR i IN 1 .. 3 LOOP

      --初始化账户ID
      select lpad(ACPS_TRAN_SQ_SEQ.Nextval, 19, '0') into acctId from dual;

      --创建1个普通人民币账户
      register_acct(acctId, 'SYS普通人民币账户' || i, custId);

      --循环开通交易权限
      FOR i IN 1 .. txnCds.count LOOP
        --开通账户交易权限
        open_acct_tran_pri(acctId, txnCds(i));
      END LOOP;
      --结束循环

    END LOOP;
    --结束循环创建三个账户

  END;

  ---------------------------------------------

end;

  ---------------------------------------------
  --call init_corp('f2','方红文2');
  ----------------------------------------------------

 

还有

 

create or replace procedure register_user(email    IN varchar,
                                          operId   IN varchar,
                                          operName IN varchar,
                                          userType IN varchar,
                                          custId   IN varchar) is
 userId varchar(20);
begin

--获取用户ID
select USER_INFO_SEQ.Nextval into userId from dual;

--如果是财务员和管理员,则打开工作流审批权限
 if(userType='20' or userType='21') then

 --创建工作流审批权限
 insert into SECURITY_USER_ROLE(SQ,USER_ID,ROLE_ID,APPID,CREATED_TS,LAST_UPD_TS)
 values(SECURITY_USER_ROLE_SEQ.Nextval,userId,'2','2',sysdate,sysdate);

 end if;


end;

---------------------------------------------

 

分享到:
评论

相关推荐

    Java调用oracle存储过程输出自定义对象或二维表

    在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    在实际开发过程中,当需要返回复杂的数据结构,如二维数组或结果集时,可以通过存储过程中使用集合数据结构来实现。 #### 2. PL/SQL存储过程及Java程序的编写 ##### 2.1 索引表作为输出参数 索引表是一种非常灵活...

    Oracle 笔记.docx

    - **控制语句**:实现流程控制,如循环、条件判断等。 - **动态SQL**:运行时构建和执行SQL语句。 - **错误处理**:捕获和处理异常。 - **游标**:用于处理记录集的对象。 - **子程序**:包括过程和函数,用于...

    Oracle11g从入门到精通2

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例丰富...

    oracle的proc学习资料

    解决这个问题的方法之一是在查询时使用`TO_CHAR`函数转换日期为字符串,或者调整会话的NLS_DATE_FORMAT设置。 #### 六、有参数传入并且输出查询结果的实例 当动态SQL需要接收参数时,可以使用`EXEC SQL WHENEVER`...

    Oracle-ERP开发笔记

    - 矩阵报表是一种特殊的报表形式,常用于展示二维数据。 **11. Report编译出错** - 探讨了常见的Report编译错误及其解决方案。 --- #### 三、Oracle数据库基础 **1. 常用函数** - Oracle提供了丰富的内置函数来...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    Oracle11g从入门到精通

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例丰富...

    oracle教程

    - **表**:用于存储数据的二维表格。 - **视图**:虚拟表,其内容由查询语句决定。 - **索引**:用于提高查询效率的数据结构。 - **存储过程和函数**:可重用的PL/SQL代码。 **5.2 表空间** - **表空间管理**:...

    在VB中利用OO4O实现Oracle空间数据库访问.pdf

    对象关系模型使用列来存储对象,可以直接操作几何数据,而关系模型则通过二维表存储对象,适合于分布式数据库环境,但在空间索引和查询性能上略逊一筹。 【SDO_GEOMETRY 对象类型】 在对象关系模型下,Oracle ...

    oracle oci 批量插入源代码

    这组数据可以是二维数组或其他合适的数据结构。执行oci_execute时,数据库一次性处理整个数据集,而不是逐条插入。 4. **示例代码**:oci_batch_source文件中的代码可能展示了如何初始化环境、建立连接、准备SQL...

    Oracle数据库_复习10.12整理.pdf

    12. 当一个二维表(B表)包含另一个二维表(A表)的主关键字时,A表的主关键字成为B表的外部关键字。 13. 空值(NULL)表示字段或变量无确定值,不同于空字符串、空格或数值0。 14. 查询是只读的,但视图可以更新源...

    oracle 基础讲解

    - **数据库表**:用于存储数据的二维表格,由行和列组成。 - **SQL\*Plus环境**:Oracle提供的交互式命令行工具,用于执行SQL语句和管理数据库。 - **SQL指令**:用于查询、更新、插入和删除数据的标准语言。 #### ...

    C++课程学习体系借鉴.pdf

    6. 简单的一维和二维数组:介绍数组的声明、初始化和操作,以及二维数组的使用。 7. C语言文件操作:讲解如何读写文件,包括文本文件和二进制文件的处理。 8. 预处理与自定义数据类型:涵盖宏定义、条件编译以及...

    Oracle数据库基础

    PL/SQL(Procedural Language for SQL)是一种面向过程的语言,专为Oracle数据库设计,用于编写存储过程、函数和触发器。PL/SQL的特点包括: - **块结构**:PL/SQL代码通常由多个块组成,每个块可以包含变量声明、...

    PLSQL笔记整理

    - **二维嵌套表**:嵌套表中的元素也是嵌套表。 - **集合方法**: - `EXISTS`:检查集合中是否存在某个值。 - `COUNT`:计算集合中元素的数量。 - `LIMIT`:限制集合中元素的数量。 - `FIRST` 和 `LAST`:获取...

    通过父编码信息给子节点分组

    数据库中的数据并不总是以简单的二维表格形式存在,有时需要表示层级关系,这就是树形结构。每个节点都有一个父节点(除了根节点),并且可以有多个子节点。在描述这类数据时,我们通常会用到一个自引用的字段,...

    华为面试题

    数组是Java中基本的数据结构,分为一维数组、二维数组等,用于存储固定数量的同类型元素。数组的特性包括固定大小、索引访问(从0开始)、内存连续等。 【多线程】 在Java中,多线程是并发编程的重要概念,常用于...

Global site tag (gtag.js) - Google Analytics