gpt4 book ai didi

sql - 在 Oracle 中执行动态 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 00:38:30 25 4
gpt4 key购买 nike

我有一个 SELECT 查询,其中我将有一个动态 WHERE 条件。问题是当我尝试将 WHERE 条件 PARAMETER 与 SQL 查询连接时,它不允许我保存 PROCEDURE

例如:

CREATE PROCEDURE usp_MySearchQuery
(
QTYPE IN INT,
OUT_CUR OUT SYS_REFCURSOR
)
IS
DYN_QUERY VARCHAR2;
BEGIN
IF QTYPE=1 THEN
DYN_QUERY :=' BETWEEN 1 AND 2';
ELSE
DYN_QUERY :='=10';
END IF;

OPEN OUT_CUR FOR
SELECT * FROM MYTABLE WHERE TYPE=QTYPE AND ID || DYN_QUERY;
END;

这就是我的程序的样子。我尝试了 EXECUTE IMMEDIETE 但在其文档本身中,其编写的内容不适用于多行查询。

MSSQL 中,我们有 EXEC(不确定)命令,它可以执行发送给命令的文本。以同样的方式,我们有任何可以在 Oracle

中运行动态查询的命令
UPDATE: Answer

我试过这样的。

  OPEN OUT_CUR FOR
' SELECT * FROM MYTABLE WHERE TYPE=:QTYPE AND ID ' || DYN_QUERY
USING QTYPE;

成功了

最佳答案

动态 字符串必须用“单引号”括起来

OPEN OUT_CUR FOR
'SELECT * FROM MYTABLE WHERE ID '|| DYN_QUERY;

EXECUTE IMMEDIATE 允许多行结果,如果您使用 BULK COLLECT

示例:

DECLARE
TYPE myarray IS TABLE OF VARCHAR2(100);
v_array myarray;
BEGIN
EXECUTE IMMEDIATE 'select ''x'' from dual union all select ''y'' from dual'
BULK COLLECT INTO v_array;

--Or you could use the alternative quoting mechanism to avoid doubling quotation marks.
--EXECUTE IMMEDIATE q'[select 'x' from dual union all select 'y' from dual]'
-- BULK COLLECT INTO v_array;

FOR i IN 1..v_array.count
LOOP
DBMS_OUTPUT.PUT_LINE(v_array(i));
END LOOP;
END;

EXECUTE IMMEDIATE 使用绑定(bind)变量

String := 'SELECT * FROM EMP WHERE name = :name AND age = :age AND :name <> ''Mahesh''';

EXECUTE IMMEDIATE String USING 'Mahi',21,'Mahi';
<OR>
EXECUTE IMMEDIATE String USING proc_variable1,proc_variable2,proc_variable1;

关于sql - 在 Oracle 中执行动态 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22216805/

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