[英]PLSQL DEFINE variable populate using cursor
我需要有关动态SQL和游标的帮助。 我有具有DEFINE变量的存储过程。 如何使用光标填充DEFINE变量?
我想使用另一个表作为游标的源并将这些结果插入另一个表。
这是关于我的问题的简化示例:
CREATE OR REPLACE PROCEDURE usp_TEST
AS
BEGIN
DEFINE vTable = 'TABLE_NAME'; -- How I can create cursor loop, so I can loop and change this table name using another table as source?
INSERT INTO results
WITH CTE_main
AS
(
SELECT
TABLE_NAME
FROM dest_TABLES
)
SELECT
'SELECT * FROM ' || '&vTable' || ' source INNER JOIN ' || cte.TABLE_NAME || ' dest ON source.ID = dest.ID;' AS query
FROM CTE_main cte
END;
源表仅包含表名:
TABLE_ONE
TABLE_TWO
等等...
结果应该是这样的:
SELECT * FROM TABLE_ONE source INNER JOIN DEST_ONE dest ON source.ID = dest.ID;
SELECT * FROM TABLE_ONE source INNER JOIN DEST_TWO dest ON source.ID = dest.ID;
SELECT * FROM TABLE_TWO source INNER JOIN DEST_ONE dest ON source.ID = dest.ID;
SELECT * FROM TABLE_TWO source INNER JOIN DEST_TWO dest ON source.ID = dest.ID;
您是否喜欢以下内容:
WITH dest_tables AS (SELECT 'TABLE_ONE' table_name FROM dual UNION ALL
SELECT 'TABLE_TWO' table_name FROM dual),
cte_main AS (SELECT 'DEST_ONE' table_name FROM dual UNION ALL
SELECT 'DEST_TWO' table_name FROM dual)
SELECT 'SELECT * FROM ' || dt.table_name || ' src INNER JOIN ' || cm.TABLE_NAME || ' dest ON src.ID = dest.ID;' AS query
FROM dest_tables dt
CROSS JOIN cte_main cm
ORDER BY dt.table_name, cm.table_name;
QUERY
-------------------------------------------------------------------------
SELECT * FROM TABLE_ONE src INNER JOIN DEST_ONE dest ON src.ID = dest.ID;
SELECT * FROM TABLE_ONE src INNER JOIN DEST_TWO dest ON src.ID = dest.ID;
SELECT * FROM TABLE_TWO src INNER JOIN DEST_ONE dest ON src.ID = dest.ID;
SELECT * FROM TABLE_TWO src INNER JOIN DEST_TWO dest ON src.ID = dest.ID;
? (注意,我使用了从句中的两个子查询来模拟表中的数据;您不需要这两个子查询,只需使用表即可。)
不需要PL / SQL,仅需要SQL。 不过,您可以采用上述语句,并将其用于PL / SQL程序内的insert语句中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.