Oracle PL/SQL 用户输入错误“未声明绑定变量”

Posted

技术标签:

【中文标题】Oracle PL/SQL 用户输入错误“未声明绑定变量”【英文标题】:Oracle PL/SQL User input error "Bind variable not declared" 【发布时间】:2020-06-24 12:44:22 【问题描述】:
accept x char prompt 'Please enter something: '
declare 
  a varchar2(50);
begin
  a := '&x';
  Select MIN(lowest_elevation) as lowest , Max(highest_elevation)as highest FROM countries where country_name = :a;
end;           

我从用户那里获取输入,然后将其传递给 where 子句。我似乎无法在网上找到任何解决方案。我不知道我做错了什么。提前谢谢你。

【问题讨论】:

【参考方案1】:

a是PL/SQL局部变量,不是SQL绑定变量,所以引用时不应该有冒号:

where country_name = a;

要使其成为绑定变量,它需要由客户端/应用程序/IDE 定义;例如在 SQL Developer 中:

accept x char prompt 'Please enter something: '
variable a varchar2(50);

begin
  :a := '&x';
  Select MIN(lowest_elevation) as lowest , Max(highest_elevation)as highest
  FROM countries
  where country_name = :a;
end; 

请注意,现在没有 declare 部分,因为您不再将 a 声明为 PL/SQL 变量 - 它是客户端变量。要将替换变量 &x 分配给它,它需要冒号 :a := '&x';,因为它也是一个绑定变量。

我不是说你应该这样做;只是显示差异。

当然,您也可以完全跳过a 变量:

accept x char prompt 'Please enter something: '

begin
  Select MIN(lowest_elevation) as lowest , Max(highest_elevation)as highest
  FROM countries
  where country_name = '&x';
end;

顺便说一句,您必须选择 进入 一些东西,所以您的代码仍然无法像当前编写的那样工作。

【讨论】:

感谢兄弟它有效。我对其他语言感到困惑。我找到了进入错误的解决方案

以上是关于Oracle PL/SQL 用户输入错误“未声明绑定变量”的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL Oracle 10g 询问用户输入(替代变量除外)

ORACLE PL/SQL编程总结

Oracle PL/SQL 语句抛出错误

PL/SQL Oracle 错误处理

ORA-06510: PL/SQL: 未处理的用户定义异常 [Oracle]

慕课网笔记之oracle开发利器-PL/SQL基础