pl/sql动态根据cursor插入数据(含'&等特殊字符)

经常遇到存储过程中需要使用动态sql,进行插入或更新数据操作。

通常数据来源游标,

如果直接用动态sql拼接,含有特殊字符‘&等就会报错。

解决方法:使用参数。

  DECLARE
  TYPE t_rd IS RECORD(
    id   NUMBER,
    NAME VARCHAR2(20));
  TYPE t_tb IS TABLE OF t_rd INDEX BY BINARY_INTEGER;
  t_x t_tb;
  CURSOR cur_d IS
    SELECT 1 id, '''' names FROM dual UNION ALL SELECT 2, '&' FROM dual;
  i      NUMBER := 1;
  lv_sql VARCHAR2(1000);
BEGIN
  FOR cur IN cur_d LOOP
    lv_sql := 'insert into dual(dummy) select  :p  from dual';
    dbms_output.put_line(lv_sql);
    EXECUTE IMMEDIATE lv_sql using cur.names;
    i := i + 1;
  END LOOP;

END;
原文地址:https://www.cnblogs.com/running-fish/p/9486901.html