使用 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 替换变量进行查询的主要内容,如果未能解决你的问题,请参考以下文章