把手& oracle存储过程中的符号

时间:2016-10-13 10:49:34

标签: oracle stored-procedures

我有一个接受varchar2输入参数的oracle存储过程。我的问题是某些输入参数包含“&”或“<”标志。由于这些是特殊字符Oracle忽略它。

由于这是存储过程,因此无法通过某些系统调用SET DEFINE OFF。

请你帮忙解决这个问题,因为我想用这个特殊字符存储数据,比如“A& M Solution”或“hemil mistry”

对此有任何帮助

3 个答案:

答案 0 :(得分:1)

您需要在调用者中设置DEFINE OFF,而不是在过程中。 例如:

create or replace procedure doSomething(str in varchar2) is
begin
    dbms_output.put_line(str);
end;

如果我从SQLPlus调用此过程,我得到:

SQL> exec doSomething('&&&');
&&&

PL/SQL procedure successfully completed.

SQL> exec doSomething('&aa');
Enter value for aa: XXX
XXX

PL/SQL procedure successfully completed.

设置DEFINE OFF后,​​我有:

SQL> set define off
SQL> exec doSomething('&aa');
&aa

PL/SQL procedure successfully completed.

答案 1 :(得分:0)

create table s (str varchar2(4000));
create or replace procedure storestr(str in varchar2) is
begin
insert into s values(str);
commit;
end;
/
exec storestr('&&&');
exec storestr('&&<');
select * from s;

一切正常。 你有什么问题?也许请发布您的程序将对包含特殊字符的数据进行处理。

答案 2 :(得分:0)

当您将特殊字符作为输入参数传递时,您应该使用函数

  

CHR()

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions019.htm

示例:

set serveroutput on size 3000

create or replace procedure p_accept_special_char(ip_str in varchar2) is
begin
    dbms_output.put_line(ip_str);
end;
/
exec p_accept_special_char(chr(38)||chr(62)||chr(60))
/

输出:

SQL> set serveroutput on size 3000
SQL>
SQL> create or replace procedure p_accept_special_char(ip_str in varchar2) is
  2  begin
  3      dbms_output.put_line(ip_str);
  4  end;
  5  /

Procedure created.

SQL> exec p_accept_special_char(chr(38)||chr(62)||chr(60))
&><

PL/SQL procedure successfully completed.