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

来源:互联网 发布:淘宝刷手qq群 编辑:程序博客网 时间:2024/04/28 21:18

我们如果想在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 thenexecute 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 thenINSERT INTO cert_users_in_sysTypeSELECT cui.user_id,'-1' FROM cert_user_info cui WHERE cui.deleted=0;COMMIT;END IF;

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

declarei number;begin--yidongming@20160829 select count(*) into i from user_tables where table_name='CERT_USERS_IN_SYSTYPE';if i=0 thenexecute 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 0