当我运行这样的SQL时:
select * from tbl_emp where emp_name like '%%'
它给了我所有记录。 当我像这样运行时:
select * from tbl_emp where emp_name like : arg_emp_name
然后执行查询,然后将arg_emp_name作为'%%'
传递,它返回0条记录。
为什么会这样?
谢谢。
答案 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条记录。