簡體   English   中英

使用游標填充PLSQL DEFINE變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM