我有一个会不断扩展的 SQL 文件,并且应该包含多个 SELECT 查询。目标是同时执行多个 SELECT 查询并将结果作为单个 CSV 字符串返回。我不想使用单独的游标,因为脚本将来将包含大量 SELECT 查询,并且在代码中使用许多游标是不可扩展的。
-- (ID_CB, VARCHAR2(15), optional)
-- (X_CB, VARCHAR2(15), optional)
DECLARE
V_ID_CB VARCHAR2(15) := '{V_ID_CB}';
V_X_CB VARCHAR2(15) := '{V_X_CB}';
BEGIN
IF V_ID_CB IS NOT NULL THEN
OPEN :result_cursor FOR
SELECT * FROM DEMANDES WHERE ID_CB = V_ID_CB;
ELSIF V_X_CB IS NOT NULL THEN
OPEN :result_cursor FOR
SELECT * FROM SITES;
END IF;
END;
将来,我希望脚本能够执行许多 SELECT 查询,并且希望将结果作为单个 CSV 字符串返回,而不需要为每个 SELECT 查询定义单独的 CURSOR。
我的问题:
是否可以在单个查询中执行多个 SELECT 并以 CSV 字符串形式获取结果? 如果是这样,如何在不必为每个 SELECT 定义单独的 CURSOR 的情况下实现这一点?
预先感谢您的帮助。
是否可以在单个查询中执行多个 SELECT 并以 CSV 字符串形式获取结果?如果是这样,如何在不必为每个 SELECT 定义单独的 CURSOR 的情况下实现这一点?
如果您要这样做,请使用
UNION ALL
:
SELECT 1 AS result_set,
expression_that_generates_your_csv_string AS csv
FROM table1
UNION ALL
SELECT 2, expression_that_generates_your_csv_string FROM table2
UNION ALL
SELECT 3, expression_that_generates_your_csv_string FROM table3
UNION ALL
SELECT 4, expression_that_generates_your_csv_string FROM table4
但是,这似乎是个坏主意。