在给存储过程传入的字符串变量连接单引号时,会发现字符串里面有空格。出现这种情况的主要是因为变量的类型为char,因为char类型为固定长度,如果给变量赋值的长度小于声明的长度,Oracle会自动在字符串后面填充空格。解决方法就是将变量的声明类型改为varchar,这种类型不会填充空格。 最好保持存储过程参数的类型和调用时声明变量的类型一样。
给大家举个?:
下面是存储过程里面字符串连接单引号的代码片段,其中chr(39)为单引号的ascii码
v_sql := 'SELECT COUNT(*) FROM ALL_TABLES WHERE OWNER ='||chr(39)||owner||chr(39)||'AND TABLE_NAME ='||chr(39)||tablename||chr(39);
declare
t char(20);
o char(20);
n number;
begin
t:= upper('table');
o:= upper('temp');
table_exit(o,t,n);
end;
我们可以看到输出的结果里面含有空格
SELECT COUNT(*) FROM ALL_TABLES WHERE OWNER ='TEMP 'AND TABLE_NAME ='TABLE '
现在在调用的时候将声明变量的类型改为varchar
declare
t varchar(20);
o varchar(20);
n number;
begin
t:= upper('table');
o:= upper('temp');
table_exit(o,t,n);
end;
我们可以看到里面不再有空格了
SELECT COUNT(*) FROM ALL_TABLES WHERE OWNER ='TEMP'AND TABLE_NAME ='TABLE'