当args传递时,oracle查询返回0条记录

时间:2011-02-14 15:51:05

标签: sql oracle

当我运行这样的SQL时:

select * from tbl_emp where emp_name like '%%'

它给了我所有记录。 当我像这样运行时:

select * from tbl_emp where emp_name like : arg_emp_name

然后执行查询,然后将arg_emp_name作为'%%'传递,它返回0条记录。 为什么会这样? 谢谢。

2 个答案:

答案 0 :(得分:5)

这应该可以正常工作。例如,以下内容返回与no 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

之间没有空格

有那个空间导致错误

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:

答案 1 :(得分:0)

新答案: -

根据对答案的评论,很明显oracle没有看到文字和绑定变量值之间的任何差异。正如我在旧答案中提到的那样,意义并没有改变。 @Conard的答案似乎合乎逻辑。

OLD ANSWER : -

当您将'%%'作为参数传递时,它实际上被视为字符串,并且它们在查询中使用时会失去特殊含义。

这意味着,查询将在您的列中搜索包含'%%'的数据,而不是将其视为LIKE。因此你得到0条记录。