2011-02-14 59 views
2

当我运行一个像这样的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记录。 这是为什么? 谢谢。

+4

你在绑定变量中包含单引号吗?你不应该。 – Benoit 2011-02-14 16:00:20

回答

0

新的答案: -

中为每个答案所获得的评论,很显然,甲骨文没有看到文字和绑定变量值之间的差额。我的旧回答中提到的含义并没有改变。 @Conard的答案似乎合乎逻辑。

OLD答案: -

当您通过'%%'作为一个参数,它是从字面上理解为那些字符串,他们失去了其在查询中使用时,他们有特殊的含义。

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

+2

我敢肯定唯一的办法就是如果你逃脱`%`。例如`\%\%`。这里有一个例子,你可以这样做`EXEC:arg_emp_name:='Test \ %%'; SELECT'Test'FROM DUAL WHERE'Test %% Test'like like:arg_emp_name` – 2011-02-14 16:24:34

5

这应该可以正常工作。例如,下面的返回相同数量的记录,因为没有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: