create or replace procedure PRU_TEST
is
insert_str varchar2(200);
begin
insert_str := 'insert into resmplsvpnlink_temp ml(
col1,
col2,
col3
)
select
''A'',
a.col2||''->''b.col2,
to_char(sysdate, ''yyyyMMdd'')
from A a inner join B b on a.id=b.id';
execute immediate insert_str;
commit;
end;上面是整个存储过程的代码,但是执行的时候没有错误信息,但是就是没有插入数据?怎么回事啊?
is
insert_str varchar2(200);
begin
insert_str := 'insert into resmplsvpnlink_temp ml(
col1,
col2,
col3
)
select
''A'',
a.col2||''->''b.col2,
to_char(sysdate, ''yyyyMMdd'')
from A a inner join B b on a.id=b.id';
execute immediate insert_str;
commit;
end;上面是整个存储过程的代码,但是执行的时候没有错误信息,但是就是没有插入数据?怎么回事啊?
create or replace procedure PRU_TEST
is
insert_str varchar2(200);
begin
insert into resmplsvpnlink_temp ml(
col1,
col2,
col3
)
select
''A'',
a.col2||''->''b.col2,
to_char(sysdate, ''yyyyMMdd'')
from A a inner join B b on a.id=b.id;
commit;
end;
resmplsvpnlink_temp 在存储过程中新建的临时表
--动态sql拼接有错
--Oracle中两个单引号才算一个
create or replace procedure PRU_TEST
is
insert_str varchar2(200);
begin
insert_str := 'insert into resmplsvpnlink_temp ml(col1,col2,col3) select '||'''A'''||',a.col2>b.col2,to_char(sysdate, '||'''yyyyMMdd'''||') from A a inner join B b on a.id=b.id';
execute immediate insert_str;
commit;
end;
2 is
3 insert_str varchar2(200);
4 begin
5 insert_str := 'insert into resmplsvpnlink_temp(--我把你这里ml去掉了
6 col1,
7 col3
8 )
9 select
10 ''A'',
11 to_char(sysdate, ''yyyyMMdd'')
12 from dual';
13 execute immediate insert_str;
14* end;
SQL> /过程已创建。SQL> exec pru_test;PL/SQL 过程已成功完成。SQL> select * from resmplsvpnlink_temp;COL1 COL2 COL3
---------- -------------------- ----------
A 20100925SQL> exec pru_test;PL/SQL 过程已成功完成。SQL> select * from resmplsvpnlink_temp;COL1 COL2 COL3
---------- -------------------- ----------
A 20100925
A 20100925
如果是会话级别的,commit后数据时存在的,但是会话退出后数据清空的。另外:pl/sql中用四个单引号才能表示一个引号:程序中写四个'''' ,解析完成后才是一个'。