我有一个接受varchar2输入参数的oracle存储过程。我的问题是某些输入参数包含“&”或“<”标志。由于这些是特殊字符Oracle忽略它。
由于这是存储过程,因此无法通过某些系统调用SET DEFINE OFF。
请你帮忙解决这个问题,因为我想用这个特殊字符存储数据,比如“A& M Solution”或“hemil mistry”
对此有任何帮助
答案 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.