oracle 中的多个逗号转译问题

在存储过程中经常要打印例如‘a’,a等,需要加逗号有时候是‘’‘||a||’ ”,有时候是’||a||‘,经常搞不清楚。今天终于研究清楚了。

新建一个sql界面
(1)
begin

Dbms_Output.put_line(1 );

end;
这时候打印出来的是 1 number型
(2)
begin

Dbms_Output.put_line(‘1’);

end;
这时候打印出来还是1,但是是varchar型
(3)如果我要打印’1’了?
begin

Dbms_Output.put_line(””||1||””);

end;
这时候打印出来是 ‘1’ ,varchar。明白没?
(4)
begin

Dbms_Output.put_line(’ ‘||1||’ ‘);

end;
这时候打印出来是 1 注意,有空格了(博客显示排版不大清楚,你们自己试验一下)
好了开始总结
在oracle中 ’ ‘用两个逗号圈起的区域就是一个转译的过程,就是告诉大家中的部分是个字符型,例如(2)中将数字型1转译成字符型1。
(4)中将中间的空格转译成字符打印出。
而在(3)中有4个逗号,标号为1234,
1和4逗号告诉大家中间的是字符型,而逗号2 为转译字符,告诉大家逗号3是个逗号。

转义无非是两种情况:1:将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。2:用来将特殊意义的字符转换回它原来的意义。

再说个存储过程中的语句
存储过程中例如
select a.cell_1 into 一个变量val from TB_一个表 a ;
这样是可以的
但是update,insert等是不可以的,要用动态语句,例如
str_sql :=’merge into ’ ||TB_A||’ c
using ‘||TB_B||’ d
on (c.’||com_CELL||’=d.’||com_CELL||’)
when matched then
update set c.’||CELL_A||’=d.’||CELL_B||’ ,c.MOD_COND=”’||MOD_COND||””;

Dbms_Output.put_line(str_sql);
–执行语句
execute immediate str_sql;
为什么了?
因为整个存储过程是一个事务,事务是要开辟内存去解决的,一个事务的中间是不允许存在其他事务的,除非你告诉电脑oracle我还要在事务中开辟一个事务。
简单的说就是,存储过程中如果出现需要改变内存,开辟硬件的情况就需要通过sql:=’……………………………..’这种形式告诉电脑,然后输出。像select,设置变量等无需改变表的内存,但是一旦对一个表插入数据,更新数据,等,就需要动态语句执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值