关于orcale存储过程中字符串拼接问题小谈

前段时间,应工作要求,要在orcale数据库中写两个根据传入表名创建备份表,并且复制表结构和相关数据。

写的过程中,需要在' '中内嵌' ',当时在网上看了很多博客,都是一样的建议用转义,样例基本上都一样,感觉十分麻烦。

无疑中看到一个博客上用ASCII码进行拼接,顿时觉得见到了曙光,且拼接出来的sql很清晰。

样例:

create or replace procedure proc_migration_data(tf_table_name in varchar2) is
  tf_date varchar2(16);
  tf_date_before varchar2(16);
  tf_data_nd varchar2(16);
  tf_table_black_name VARCHAR2(64);
  tf_table_sql varchar2(1024);
  tf_table_sql_del varchar2(1024);
begin
  select to_char(sysdate,'yyyymm') into tf_date  from dual;
  select to_char(sysdate -1,'yyyy-mm-dd') into tf_date_before  from dual;
  select to_char(sysdate,'yyyy-mm-dd') into tf_data_nd from dual;
  tf_table_black_name := tf_table_name ||'_'|| tf_date;
  tf_table_sql := 'insert into '|| tf_table_black_name || ' select * from '|| tf_table_name || ' t  where t.create_dt >  to_date('||chr(39)|| tf_date_before ||chr(39)||','||chr(39)||'yyyy-MM-dd'||chr(39)||')  and   t.create_dt <  to_date('||chr(39)||tf_data_nd||chr(39)||','||chr(39)||'yyyy-MM-dd'||chr(39)||')';
  dbms_output.put_line('打印'  ||  ':'  ||  tf_table_sql); 
  tf_table_sql_del:='delete from '||tf_table_name ||' t where t.create_dt >  to_date('||chr(39)|| tf_date_before ||chr(39)||','||chr(39)||'yyyy-MM-dd'||chr(39)||')  and   t.create_dt <  to_date('||chr(39)||tf_data_nd||chr(39)||','||chr(39)||'yyyy-MM-dd'||chr(39)||')';
  execute immediate tf_table_sql;
  execute immediate tf_table_sql_del;
  commit;
end proc_migration_data;

使用 ASCII 编码,单引号 ' 的编码是39。这种方法解决了转义时的繁琐,使sql拼接变的方便和清晰。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值