从Oracle数据库中获取带有特殊字符的列值

问题描述 投票:0回答:1

我在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”并在参数值中传递相同的值时,存储过程发现并返回了记录。如何用特殊字符处理?

oracle10g
1个回答
0
投票

如果发布您使用的过程以及调用它的方式,将会有所帮助。同时,这可能是怎么回事。

测试用例:表和函数(从函数返回某些内容比过程要容易):

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的响应。

© www.soinside.com 2019 - 2024. All rights reserved.