gpt4 book ai didi

sql - 动态 SQL 或 WITH 子句

转载 作者:行者123 更新时间:2023-12-01 06:28:42 25 4
gpt4 key购买 nike

我一直在反复修改以下内容,试图最大限度地提高代码的可重用性,同时保持最佳性能。

我有一个非常 的 SQL 查询长而复杂 ,我试图多次运行(准确地说是 6 次),每次都使用不同的 WHERE CLAUSE。花了很多功夫才把它变成我可以交换 WHERE CLAUSE 的形式……但是我在为每种情况运行查询时遇到了很多困难。

即>

INSERT INTO table_x (SELECT *
FROM mst_q (+300 lines query)
WHERE complex_where_clause_1);

INSERT INTO table_x (SELECT *
FROM mst_q (+300 lines query)
WHERE complex_where_clause_2);

我试过使用 UNION ALL , WHERE with CASE , WHERE with OR ,甚至想到了 6 个不同的 CURSORS这将独立插入 6 个案例中的每一个的结果。 有 6 个不同的 CURSORS 工作,性能很棒,重复代码太多 ,因为所有变化都是 WHERE条款。

我想,太好了, dynamic SQL !但是“ 长而复杂的”语句比 VARCHAR2的大小要大得多。 .

有没有办法做类似下面的事情?这是我能想到的最简单的选项,唯一的问题是 v_sql 肯定会比 VARCHAR2 的大小限制更长。 .
v_sql := 'INSERT INTO table_x (col1, col2) SELECT col1, col2 FROM WHERE ';

v_scen1 := 'complex_where_clause_1';
v_scen2 := 'complex_where_clause_2'

EXECUTE IMMEDIATE v_sql || v_scen1;
EXECUTE IMMEDIATE v_sql || v_scen2;

最佳答案

...啊,太简单了,直接用:v_sql CLOB;
我将在几个小时内详细说明;但如果可能的话,我能够完全按照我的要求去做...使用 CLOB打破 VARCHAR2 的大小限制,我只是简单地附加 WHERE子句并按顺序执行...

关于sql - 动态 SQL 或 WITH 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com