存储过程创建

  1. CREATE OR REPLACE PROCEDURE “存储过程名称”(参数1 IN VARCHAR2,参数2 IN VARCHAR2,参数3 OUT INTEGER) is
  2. PROCEDURE “存储过程名称”(参数1 IN VARCHAR2,参数2 IN VARCHAR2,参数3 OUT INTEGER) is
CREATE OR REPLACE PROCEDURE “存储过程名称”(参数1 IN VARCHAR2,参数2 IN VARCHAR2,参数3 OUT INTEGER) IS
--定义变量
V_1 VARCHAR(100);
--定义变量并赋值
V_2 VARCHAR(32767) : = '内容';
--定义变量
V_3 NUMBER(10);
--定义变量并赋值
V_4 NUMBER(10):=0;
--定义游标
TYPE CUR   IS  REF CURSOR;
V_CHK_CUR   CUR;
--定义集合
TYPE CHK_REC IS RECORD(
ROW_ID ROWID
,V5 NUMBER(1)
,V6 NUMBER(1)
,RESULT VARCHAR(100)
);
TYPE CHK_LIST_T IS TABLE OF CHK_REC;
CHK_LIST CHK_LIST_T;
--定义游标
CURSOR CUR_V7 IS SELECT * FROM A;
ROW_INDEX CUR_V7%ROWTYPE
BEGIN
--查询数据并用游标便利 代码块1开始
V_2 :=“SELECT ROW_ID ,V5,V6,RESULT    FROM VIEW”; --查询有问题的数据
OPEN V_CHK_CUR   FOR V_2 ;--打开游标,代码块2开始
LOOP
FETCH V_CHK_CUR   BULK COLLECT INTO CHK_LIST LIMT 1000;--循环遍历,一次取出1000条数据
EXIT WHEN CHK_LIST.COUNT =0;--如果没数据了,就退出循环。

FOR idx IN 1 .. CHK_LIST.COUNT LOOP --循环1000条数据 ,代码块3开始

CHK_LIST(idx).RESULT:=CHK_LIST(idx).RESULT || CASE CHK_LIST(idx).V5 WHEN 1 THEN '条件描述1' ELSE ‘条件描述2’ END;

END LOOP;--循环1000条数据 ,代码块3结束

BEGIN--遍历更新到目标表
FORALL IDX IN 1.. CHK_LIST.COUNT
UPDATE VIEW_A SET B = CHK_LIST(idx).RESULT
WHERE ROWID =  CHK_LIST(idx).ROW_ID;
END;--遍历更新到目标表




END LOOP;--代码块2结束
--代码块1结束
END;

You may also like...

发表回复