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;
/