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行。