oracle的存储过程中新建表后,怎么往表里面插入数据。

我们如果想在oracle存储过程中新建表后往表里插入数据,可能会这样写。其中i为前面定义的number变量。可以看到我想在新建的表的第一列插入其他的表的字段的数据user_id。然后在第二列插入-1这个值。

--yidongming@20160706 
select count(*) into i from user_tables where table_name='CERT_USERS_IN_SYSTYPE';
if i=0 then
execute immediate
'create table CERT_USERS_IN_SYSTYPE(
USER_ID NUMBER(6,0) NOT NULL,
SYS_TYPE NUMBER(6,0) NOT NULL,
constraint PK_US primary key (USER_ID,SYS_TYPE)
)';
COMMIT;
END IF;

--yidongming@20160720 初始化CERT_USERS_IN_SYSTYPE表
select count(*) into i from CERT_USERS_IN_SYSTYPE;
if i=0 then
INSERT INTO cert_users_in_sysType
SELECT cui.user_id,'-1' FROM cert_user_info cui WHERE cui.deleted=0;
COMMIT;
END IF;

当他们分开执行时,先执行第一个,再第二个,是没有问题的,如果将插入表的语句直接写在创建表之后,都放在一个存储过程中,执行脚本会报错,提示说该表不存在。原因就是insert这个语句在执行时会检查分析,这时候的表还没有创建。所以报错了。所以将insert语句用execute immediate的方式执行可以避开检查。执行结果也是成功的。下面是修改过的语句。

declare
i number;
begin
--yidongming@20160829 
select count(*) into i from user_tables where table_name='CERT_USERS_IN_SYSTYPE';
if i=0 then
execute immediate
'create table CERT_USERS_IN_SYSTYPE(
USER_ID NUMBER(6,0) NOT NULL,
SYS_TYPE NUMBER(6,0) NOT NULL,
constraint PK_US primary key (USER_ID,SYS_TYPE)
)';
execute immediate'
INSERT INTO cert_users_in_sysType (user_id,sys_type)
SELECT cui.user_id,''-1'' FROM cert_user_info cui WHERE cui.deleted=0';
commit;
end if;

commit;
end ;
如果没看懂的或者有疑问的欢迎留言。如果有错误也欢迎指出,谢谢!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值