oracle存储过程定义游标用动态sql
2016-07-04 16:49
525 查看
1.执行存储过程的sql脚本
execute PROC_AUTHORIZESAVE('News');2.存储过程
CREATE OR REPLACE PROCEDURE PROC_AUTHORIZESAVE( TABLENAME IN VARCHAR2 ) AS V_MANDATETYPE VARCHAR2(2); V_ID VARCHAR2(1000); V_MANDATESCOPE CLOB; AV_SPLIT VARCHAR2(2) := ';'; V_LENGTH NUMBER; V_START NUMBER; V_INDEX NUMBER; V_STR VARCHAR2(1000); V_SQL VARCHAR2(1000);--动态sql BEGIN DECLARE MYCUSOR SYS_REFCURSOR;--定义游标 BEGIN V_SQL:='DELETE FROM TLK_P_'||TABLENAME||'_mds'; EXECUTE IMMEDIATE(V_SQL); V_SQL:='SELECT ID ,ITEM_MANDATESCOPE FROM tlk_P_'||TABLENAME||' where item_MANDATESCOPE is not null'; OPEN MYCUSOR FOR V_SQL;--用动态sql定义游标 LOOP FETCH MYCUSOR INTO V_ID,V_MANDATESCOPE; --游标取不到数据则退出 EXIT WHEN MYCUSOR%NOTFOUND; V_MANDATESCOPE := REPLACE(V_MANDATESCOPE,',',';'); V_LENGTH := LENGTH(V_MANDATESCOPE); --v_length number:=LENGTH(v_MANDATESCOPE); V_START :=1; V_INDEX :=0; V_STR :=''; IF INSTR(V_MANDATESCOPE ,AV_SPLIT) >0 THEN WHILE(V_START <= V_LENGTH) LOOP V_INDEX := INSTR(V_MANDATESCOPE, AV_SPLIT, V_START); IF V_INDEX = 0 THEN V_MANDATETYPE := SUBSTR(V_MANDATESCOPE, V_START,1); V_STR :=SUBSTR(V_MANDATESCOPE, V_START); V_START := V_LENGTH + 1; ELSE V_MANDATETYPE := SUBSTR(V_MANDATESCOPE, V_START,1); V_STR :=SUBSTR(V_MANDATESCOPE, V_START, V_INDEX - V_START); V_START := V_INDEX + 1; END IF; V_SQL:='INSERT INTO TLK_P_'||TABLENAME||'_mds (ID,'||TABLENAME||'ID,MANDATESCOPE,MANDATETYPE) VALUES('''||SYS_GUID()||''','''||V_ID||''','''||V_STR||''','''||V_MANDATETYPE||''')'; EXECUTE IMMEDIATE(V_SQL); END LOOP; ELSE V_MANDATETYPE := SUBSTR(V_MANDATESCOPE, V_START,1); V_SQL :='INSERT INTO TLK_P_'||TABLENAME||'_mds (ID,'||TABLENAME||'ID,MANDATESCOPE,MANDATETYPE) VALUES('''||SYS_GUID()||''','''||V_ID||''','''||V_MANDATESCOPE||''','''||V_MANDATETYPE||''')'; EXECUTE IMMEDIATE(V_SQL); END IF; END LOOP; CLOSE MYCUSOR; END; --提交 COMMIT; END PROC_AUTHORIZESAVE;
相关文章推荐
- Oracle----oracle 事务总结
- C# 处理批量插入数据(事物) mysql oracle sqlserver三个版本
- Oracle体系结构详细图解
- Oracle存储过程给变量赋值的方法
- Entity Framework6 with Oracle(可实现code first)
- ORACLE客户端安装--ODP.NET用于VS2013
- Linux下安装Oracle11g
- 使用JDBC处理Oracle大数据
- oracle数据库如何保存SQL语句?
- Oracle 账户锁定问题解决办法
- Java使用JDBC或MyBatis框架向Oracle中插入XMLType数据
- 不用安装Oracle客户端,远程连接Oracle数据库
- Oracle 动态SQL语句
- Oracle建立表空间和用户
- Oracle游标总结
- Oracle PL/SQL入门
- Oracle PL/SQL进阶
- Oracle PL/SQL基础知识
- oracle表分区详解
- Oracle常用脚本汇总