Oracle存储过程中,字符串连接单引号后字符串里出现空格

在给存储过程传入的字符串变量连接单引号时,会发现字符串里面有空格。出现这种情况的主要是因为变量的类型为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'

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值