【Oracle】动态SQL与游标
程序员文章站
2022-05-08 21:56:58
...
Oracle 存储过程,实现:根据存储过程入参拼接动态的查询SQL,将查询结果存入游标中,再从游标中取出数据,存入另一张表中。
下面的PL/SQL中,核心即为 OPEN C_UNITCIREF_TMP FOR 'SELECT CIMID FROM ' || TABLE_NAME;
CREATE OR REPLACE PROCEDURE P_SAVE_DEVDICT(DEVTYPE_NAME IN VARCHAR2, -- 设备类型名称 TABLE_NAME IN VARCHAR2, -- 表名 IS_SUCC OUT VARCHAR2) IS -- 设备类型ID V_TYPE_ID VARCHAR2(42) := ''; V_SQL VARCHAR2(100) := ''; V_CIMID VARCHAR2(64) := ''; TYPE TYPE_CURSOR IS REF CURSOR; -- 游标 C_UNITCIREF_TMP TYPE_CURSOR; BEGIN IS_SUCC := '0'; -- 根据设备类型名称查找对应的设备类型ID SELECT ID INTO V_TYPE_ID FROM T_DEV_TYPE WHERE NAME = '' || DEVTYPE_NAME || ''; OPEN C_UNITCIREF_TMP FOR 'SELECT CIMID FROM ' || TABLE_NAME; LOOP FETCH C_UNITCIREF_TMP INTO V_CIMID; EXIT WHEN C_UNITCIREF_TMP%NOTFOUND; INSERT INTO T_DEV_DICT (ID, CIMID, TYPE_ID) VALUES (SYS_GUID(), V_CIMID, V_TYPE_ID); END LOOP; COMMIT; IS_SUCC := '1'; EXCEPTION WHEN OTHERS THEN ROLLBACK; IS_SUCC := '-1'; DBMS_OUTPUT.PUT_LINE(SQLERRM); END P_SAVE_DEVDICT; /
下一篇: mysql游标和自定义函数实例