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

原创 2016年08月29日 17:24:46

我们如果想在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 ;
如果没看懂的或者有疑问的欢迎留言。如果有错误也欢迎指出,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:

摘要:之前在项目中使用到了Oracle数据库中通过触发器去调用存储过程执行数据解析并Update到对应的数据表中,但是,经过一段时间的测试使用发现,如果job那天停掉了,然后你再重新新建job的话,这...

Oracle存储过程中使用临时表

一、Oracle临时表知识   在Oracle中,临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而 TRAN...

Oracle存储过程中使用临时表

一、Oracle临时表知识    在Oracle中,临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而 ...

Oracle存储过程中使用临时表

原文地址;http://sosuny.iteye.com/blog/551006 一、Oracle临时表知识    在Oracle中,临时表分为SESSION、TRANSACTION两...

SQL Server中在存储过程中使用游标修改表中数据

在SQLServer中的存储过程中使用游标修改另外一张表中的数据,关键在于理清达到目标所需要完成的先后顺序,本文用一个非常简单的例子做出说明

Sql Server2008如何在存储过程中实现根据判断插入更新数据

存储过程的功能非常强大,在某种程度上甚至可以替代业务逻辑层,接下来就一个小例子来说明,用存储过程插入或更新语句。 1、数据库表结构 所用数据库为Sql Server2008。 2、创建存...

这是oracle包实体里面的一个存储过程 oracle存储过程中的if...elseif...else用法

这是oracle包实体里面的一个存储过程 CREATE OR REPLACE PACKAGE BODY CHXT_FWZ_FWH_RELATIONPACKAGE is     procedu...

oracle 存储过程返回表数据

近在测试程序需要调存储过程,项目主要针对oracle数据库,在测试过程中发现一些“坑”,这里记录下: 在百度搜索结果中会有许多关于如何写oracle存储过程返回表结果的,都提到sys_refcurs...

Java调用oracle存储过程通过游标返回临时表数据

项目开发过程中,不可避免的会用到存储过程返回结果集。特别是选择Oracle做为数据库时,就更麻烦了,因为Oracle存储过程和SQLServer的有点不太一样,直接返回不了结果集,那么怎么才能在使用O...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)