一个很简单的插入,不懂是哪里错了?

Im_root 2017-11-15 11:49:08
execute insert_tab;
begin insert_tab; end;
ORA-00984: column not allowed here
ORA-06512: at "SCOTT.INSERT_TAB", line 7
ORA-06512: at line 1


create or replace procedure insert_tab
is
v_insert_tab varchar2(1000);
begin
for i in 1..100 loop
v_insert_tab:='insert into test_tab(id,name) values (i,''aa'')';
execute immediate v_insert_tab; //这句话报错
commit;
end loop;
end insert_tab;
...全文
157 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-11-15
  • 打赏
  • 举报
回复

create or replace procedure insert_tab
is
v_insert_tab varchar2(1000);
begin
for i in 1..100 loop
v_insert_tab :='insert into test_tab(id,name) values ( 1,"aa")';
commit;
end loop;
end insert_tab;

改成:

create or replace procedure insert_tab
is
begin
for i in 1..100 loop
insert into test_tab(id,name) values (i,'aa');
commit;
end loop;
end insert_tab;

即可
神临物语 2017-11-15
  • 打赏
  • 举报
回复
i是参数,不能直接写在动态sql里面,改成下面这样就好了 v_insert_tab := 'insert into pec.gt_temp(n1,v2) values ('|| i ||',''aa'')'
江南小鱼 2017-11-15
  • 打赏
  • 举报
回复
oracle语法,字符串用单引号
碧水幽幽泉 2017-11-15
  • 打赏
  • 举报
回复
推荐第一种写法。性能好些!
碧水幽幽泉 2017-11-15
  • 打赏
  • 举报
回复

create or replace procedure insert_tab
is
v_insert_tab varchar2(1000);
begin
for i in 1..100 loop
v_insert_tab :='insert into test_tab(id,name) values ( 1,"aa")';
commit;
end loop;
end insert_tab;

改成:

create or replace procedure insert_tab
is
begin
for i in 1..100 loop
v_insert_tab :='insert into test_tab(id,name) values (1,''aa'')';
execute immediate v_insert_tab;
commit;
end loop;
end insert_tab;

也是OK的。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧