我想为我的Oracle SQL查询创建一个基于绑定参数的结果。
例如。
从emp中选择*,其中ename =:xyz;
它应该在运行时询问我xyz值。
我该怎么办?
它让我犯了很多错误 - 未声明绑定变量......
请帮忙......
感谢。
答案 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;
由于 此致