使用 Oracle 替换变量进行查询

Posted

技术标签:

【中文标题】使用 Oracle 替换变量进行查询【英文标题】:Query using Oracle substitution variables 【发布时间】:2018-05-03 13:14:24 【问题描述】:

我有一个如下示例 SQL 代码

select *
  from Engg_Studens
 where Student_Name = '&Student_Name'
   And Department = 'computer science & Engineering' ;

我的问题是:在运行 SQL 时,它要求为部门名称中的'& engineering' 替换变量。 我应该只被问到'&student_name'

【问题讨论】:

发生这种情况是因为您没有正确地转义 'computer science & Engineering' 中的 & 并将其视为绑定变量。阅读this 了解解决方案 与问题无关,但这是一个替换变量,而不是绑定参数。它们是不同的东西。 我建议将问题标题更改为“”。 【参考方案1】:

您不能编写包含“&”字符的语句。

尝试如下:

select * from Engg_Studens where Student_Name = '&Student_Name' 
and Department = 'computer science '|| chr(38) ||' Engineering' ;

【讨论】:

其实可以的。您要么必须正确转义字符,要么更改替换变量字符的设置(以使用不同的字符),要么完全关闭替换变量(并改用参数化查询)。【参考方案2】:

你可以逃脱第二个&符号(&),但老实说,我不记得如何做到这一点。我通常会这样做:

SELECT *
  FROM engg_studens
 WHERE student_Name = '&Student_Name'
   AND department = 'Computer Science &' || ' Engineering';

在此处使用串联 (||) 运算符可避免替换变量。

【讨论】:

尝试了语法,它工作。谢谢你的脚本。【参考方案3】:

另一种方法是 change the substitution character 到您确定不会在其他地方使用的东西:

SQL> set define ^

SQ> select *
  from Engg_Studens
 where Student_Name = '^Student_Name'
   And Department = 'computer science & Engineering'

Enter value for student_name: Arif
old   3:  where Student_Name = '^Student_Name'
new   3:  where Student_Name = 'Arif'

现在只有 ^Student_Name 被视为替换变量,因此您只会收到提示。

您还可以将提示与查询分开并切换到使用实际的绑定变量,但这似乎有点过头了。

【讨论】:

当我测试它时它工作了,所以不知道该告诉你什么。取决于“不起作用”是什么意思。

以上是关于使用 Oracle 替换变量进行查询的主要内容,如果未能解决你的问题,请参考以下文章

Java + Oracle 中的 SQL 查询

声明变量并在查询 oracle 中使用它们

oracle 查询 空值 注意不是 null

Oracle 查询性能优化

Oracle 中 查询结果替换的问题

不是组表达式:对 Oracle 查询进行故障排除