【问题标题】:Oracle Bind variable - query requestedOracle 绑定变量 - 已请求查询
【发布时间】:2014-09-17 14:49:44
【问题描述】:

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

例如。

Select * from emp where ename = :xyz;

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

我该怎么办?

这让我一直犯错误 - 未声明绑定变量...

请帮忙...

谢谢。

【问题讨论】:

  • 您是作为语句运行还是作为脚本运行?一个提示您输入绑定值,但我面前没有 SQL Developer,也不记得是哪个!

标签: oracle plsql oracle-sqldeveloper


【解决方案1】:

如果您将语句作为脚本 (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 以隐藏旧/新行,并且可以在exec 之前添加set feedback off 以隐藏anonymous block completed 行,如果您想从实际查询中获得反馈,可以选择在之后将其重新打开。如果您愿意,可以使用exec 设置一个固定值,但是当您要求在这种情况下不真正相关的提示时;如果脚本中有多个绑定值,则可以从匿名 PL/SQL 块中全部设置它们,而不是多次使用 exec 快捷方式。

【讨论】:

    【解决方案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 ;

    【讨论】:

      【解决方案3】:

      我认为你应该使用转义字符,在我的例子中是 &。

      应该是

      SELECT * from emp where ename = &xyz;
      

      谢谢 问候

      【讨论】:

      • 确保你已经执行了:set escape off
      • 您正在从绑定变量更改为替换变量,这在 SQL 重用方面不会有同样的好处(减少硬解析等);这里不是真正的问题,但不是问题的要求?为什么set escape off - 这里没有转义?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2021-10-27
      相关资源
      最近更新 更多