PLSQL 拼接SQL

create or replace procedure prc2 is 
v_name char(10);
begin
 for i  in ( select username from t1)
loop
  DBMS_OUTPUT.PUT_LINE('i的值是'||i.username); 
 end loop;
 end;


SQL> exec prc2;
i的值是SYS
i的值是TEST
i的值是HR
i的值是SCOTT
i的值是CZCB
i的值是CHECK

PL/SQL 过程已成功完成。




SQL> create or replace procedure prc2 is 
v_name char(10);
v_sql varchar2(4000); 
v_sql2 varchar2(4000); 
begin
 for i  in ( select username from t1)
loop
  DBMS_OUTPUT.PUT_LINE('i的值是'||i.username); 
  v_sql := 'insert into t3 select aa,bb,';
  v_sql2 :=v_sql||i.username||'from dual';
    DBMS_OUTPUT.PUT_LINE('sql的值是'||v_sql2); 
/*  exec immediate v_sql2;*/
 end loop;
 end;  2    3    4    5    6    7    8    9   10   11   12   13   14  
 15  /

过程已创建。

SQL> show err;
没有错误。
SQL> exec prc2;
i的值是SYS
sql的值是insert into t3 select aa,bb,SYS       from dual
i的值是TEST
sql的值是insert into t3 select aa,bb,TEST      from dual
i的值是HR
sql的值是insert into t3 select aa,bb,HR        from dual
i的值是SCOTT
sql的值是insert into t3 select aa,bb,SCOTT     from dual
i的值是CZCB
sql的值是insert into t3 select aa,bb,CZCB      from dual
i的值是CHECK
sql的值是insert into t3 select aa,bb,CHECK     from dual

PL/SQL 过程已成功完成。




create or replace procedure prc2 is
v_name char(10);
v_sql varchar2(4000);
v_sql2 varchar2(4000);
begin
 for i  in ( select trim(username) as username from t1)
loop
  DBMS_OUTPUT.PUT_LINE('i的值是'||i.username);
  v_sql := 'insert into t3 select  ''aa'', ''bb'',';
  v_sql :=v_sql||''''||i.username||''''||chr(9)||'from dual';
    DBMS_OUTPUT.PUT_LINE('sql的值是'||v_sql2);
   execute immediate v_sql;
 end loop;
 end;


SQL> select * from t3;

A1	   A2	      A3
---------- ---------- --------------------
aa	   bb	      SYS
aa	   bb	      TEST
aa	   bb	      HR
aa	   bb	      SCOTT
aa	   bb	      CZCB
aa	   bb	      CHECK

已选择6行。

原文地址:https://www.cnblogs.com/hzcya1995/p/13351750.html