Oracle查询返回0记录时ARGS通过
当我运行一个像这样的SQL:Oracle查询返回0记录时ARGS通过
select * from tbl_emp where emp_name like '%%'
它给我的所有记录。 当我运行它像这样:
select * from tbl_emp where emp_name like : arg_emp_name
然后执行查询,然后通过arg_emp_name为'%%'
,则返回0记录。 这是为什么? 谢谢。
新的答案: -
中为每个答案所获得的评论,很显然,甲骨文没有看到文字和绑定变量值之间的差额。我的旧回答中提到的含义并没有改变。 @Conard的答案似乎合乎逻辑。
OLD答案: -
当您通过'%%'
作为一个参数,它是从字面上理解为那些字符串,他们失去了其在查询中使用时,他们有特殊的含义。
这意味着,查询将在您的列中搜索包含'%%'
的数据,而不是将其视为LIKE。因此你得到0条记录。
我敢肯定唯一的办法就是如果你逃脱`%`。例如`\%\%`。这里有一个例子,你可以这样做`EXEC:arg_emp_name:='Test \ %%'; SELECT'Test'FROM DUAL WHERE'Test %% Test'like like:arg_emp_name` – 2011-02-14 16:24:34
这应该可以正常工作。例如,下面的返回相同数量的记录,因为没有where
条款
EXEC :arg_emp_name := '%%';
SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE :arg_emp_name
如果添加了更多的字符串
EXEC :arg_emp_name := '%ABC%';
SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE :arg_emp_name
只有在他们的名字表与ABC返回
不过我会注意到:
和arg_emp_name
之间没有空格
有这样的空间会导致t他错误
Error starting at line 4 in command:
SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE : arg_emp_name
Error report:
SQL Error: ORA-01008: not all variables bound
01008. 00000 - "not all variables bound"
*Cause:
*Action:
你在绑定变量中包含单引号吗?你不应该。 – Benoit 2011-02-14 16:00:20