Oracle Bind变量 - 请求查询

时间:2014-04-29 22:18:50

标签: oracle plsql oracle-sqldeveloper

我想为我的Oracle SQL查询创建一个基于绑定参数的结果。

例如。

  

从emp中选择*,其中ename =:xyz;

它应该在运行时询问我xyz值。

我该怎么办?

它让我犯了很多错误 - 未声明绑定变量......

请帮忙......

感谢。

3 个答案:

答案 0 :(得分:4)

如果您将语句作为脚本运行(F5),那么您将在“脚本输出”中得到此信息。窗格:

Bind Variable "xyz" is NOT DECLARED

如果您将其作为语句(control-enter)运行,则会提示您输入绑定值,结果会显示在'查询结果中。窗格中。

如果您确实需要作为脚本运行,您可以在查询中使用替换变量,如AlexisSTDM所示,或者您可以将其保留为绑定变量,但使用variable命令声明它并为其分配值它来自替换变量 - 这意味着您的实际查询不需要为每个新值进行硬解析:

variable xyz varchar2(1)
exec :xyz := '&abc';
select * from dual where dummy = :xyz;

当作为脚本运行时,系统会提示您输入 substitution 变量abc,然后将该值分配给绑定变量xyz,这是查询使用的。使用稍微更通用的查询并在提示时提供值X,'脚本输出'窗格显示:

old:exec :xyz := '&abc'
new:exec :xyz := 'X'
anonymous block completed
DUMMY
-----
X     

您可以添加set verify off来隐藏旧/新行,并set feedback off可以exec隐藏anonymous block completed行,之后可选择将其重新开启您需要来自真实查询的反馈。如果您愿意,可以使用exec设置固定值,但是当您要求提示在这种情况下并非真正相关时;如果脚本中有多个绑定值,则可以从匿名PL / SQL块中设置它们,而不是多次使用exec快捷方式。

答案 1 :(得分:2)

如果在过程中使用绑定变量,则可以按以下方式使用绑定变量

将查询创建为存储在局部变量中的动态方法 例如。

create procedure PROC ( output_result out SYS_REFCURSOR) as l_query varchar2(1000) := Null; begin l_query := 'Select * from emp where ename = :xyz'; OPEN output_result FOR l_query using xyz; End PROC ;

答案 2 :(得分:1)

我认为你应该使用转义字符,在我的情况下是&amp ;.

它将是

SELECT * from emp where ename = &xyz;

由于 此致