当用户必须输入各种标准进行搜索时,我正在尝试创建动态Select语句。
目前,除了最重要的部分外,我的声明的每一部分都有效。
我试图做这样的事情:
selStmt := 'SELECT column_one, column_2, column_3
FROM nerf
whereClause := ' WHERE TO_NUMBER('''|| column_one ||''') <= '''|| userInput ||'''';
但是,在执行此操作时,我的SELECT语句的WHERE cluse不准确,如输出行所示:
WHERE TO_NUMBER('') <= '5';
我尝试了各种带引号的解决方案,最终我发现ORA-00905缺少标识符错误,或者我收到ORA-00911:无效字符错误。
此时我不太确定如何处理这个问题。
任何有用的帮助都会提前感谢。
答案 0 :(得分:0)
这应该有效:
selStmt := 'SELECT column_one, column_2, column_3 FROM nerf';
whereClause := ' WHERE TO_NUMBER(column_one) <= TO_NUMBER('''|| userInput ||''')';
答案 1 :(得分:0)
出于某种原因,Oracle使用单引号来分隔字符串并转义字符,因此使用''
是Oracle在字符串中添加引号的指令。例如:
'This is a string with a quote here: '' and then it ends normally'
将表示为
This is a string with a quote here: ' and then it ends normally
在您的示例中,您将结束正在构建的WHERE
子句,然后连接名为column_one
的PL / SQL变量标识符:
' WHERE TO_NUMBER('''|| column_one ||''')
...标识符NULL
的{{1}}值表示为
column_one
大概你想从查询中引用 WHERE TO_NUMBER('')
,而不是从同名的PL / SQL变量引用,所以你应该删除它周围的引号:
column_one
在Oracle中转义字符串通常会让人感到愤怒 - 如果你有一个像GOAD或SQL * Developer那样具有良好语法高亮度的良好IDE,它会有很大的帮助。