0

当用户必须输入各种标准进行搜索时,我目前正在尝试创建一个动态 Select 语句。

目前,除了最重要的部分之外,我已经完成了声明的每个部分。

我正在尝试做这样的事情:

selStmt := 'SELECT column_one, column_2, column_3
            FROM nerf
whereClause := ' WHERE TO_NUMBER('''|| column_one ||''') <= '''|| userInput ||'''';

但是,在执行此操作时,我的 SELECT 语句的 WHERE 语句不准确,如我的输出行所示:

WHERE TO_NUMBER('') <= '5';

我尝试了各种带引号的解决方案,但最终出现 ORA-00905 缺少标识符错误,或者得到 ORA-00911:无效字符错误。

在这一点上,我不太确定如何解决这个问题。

任何有用的帮助都会提前感谢。

4

2 回答 2

0

这应该有效:

selStmt := 'SELECT column_one, column_2, column_3 FROM nerf';
whereClause := ' WHERE TO_NUMBER(column_one) <= TO_NUMBER('''|| userInput ||''')';
于 2013-02-26T22:55:52.520 回答
0

出于某种原因,Oracle 使用单引号来分隔字符串和转义字符,因此 using''是 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正在构建的子句,然后连接一个名为 的 PL/SQL 变量标识符column_one

' WHERE TO_NUMBER('''|| column_one ||''')

...并使用NULL标识符的值column_one表示为

 WHERE TO_NUMBER('')

大概你想column_one从查询内部引用,而不是从同名的 PL/SQL 变量中引用,所以你应该像这样删除它周围的引号:

whereClause := ' WHERE TO_NUMBER(column_one) <= TO_NUMBER('''|| userInput ||''')';

在 Oracle 中转义字符串常常令人恼火——如果你有一个良好的 IDE,并且像 TOAD 或 SQL*Developer 一样具有良好的语法高亮显示,它会很有帮助。

于 2013-02-26T23:07:51.590 回答