我在Oracle DB中有一个表,其中可能包含带有特殊字符(如“&”的值)。
例如
ID Item_Description
1 Book & Marker
2 Pen & Paper
3 Pencil
4 Marker
我有一个存储过程,其中项目描述作为参数传递。在SP中,我必须查询表以获取与参数匹配的记录。
select * from table where item_description = v_desc;
当我运行此存储过程时,参数值为“ Book&Marker”,该过程不返回任何记录。
是因为特殊字符?因为当我尝试将列值更改为“ Book and Marker”并在参数值中传递相同的值时,存储过程发现并返回了记录。如何用特殊字符处理?
如果发布您使用的过程以及调用它的方式,将会有所帮助。同时,这可能是怎么回事。
测试用例:表和函数(从函数返回某些内容比过程要容易):
SQL> select * from marker;
ID ITEM_DESCRIPT
---------- -------------
1 Book & Marker
2 Pen & Paper
3 Pencil
4 Marker
SQL> create or replace function f_marker (v_desc in marker.item_description%type)
2 return marker.id%type
3 as
4 retval marker.id%type;
5 begin
6 select m.id
7 into retval
8 from marker m
9 where m.item_description = v_desc;
10 return retval;
11 end;
12 /
Function created.
测试:先简单案例:
SQL> select f_marker('Pencil') result from dual;
RESULT
----------
3
现在,为Book & Marker
调用相同的函数:我的工具(SQL * Plus)希望我输入名为marker
的替换变量的值;那当然不是我想要的。
SQL> select f_marker('Book & Marker') result from dual;
Enter value for marker:
RESULT
----------
因此,我将使用set define off
将&
视为任何其他字符:
SQL> set define off
SQL> select f_marker('Book & Marker') result from dual;
RESULT
----------
1
SQL>
现在可以正常运行。
[正如我说的那样,如果没有帮助,请发布您的测试用例,以便我们可以看到您的工作以及Oracle的响应。