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数据库的操作之插入更新删除(八)

一.SQL的类型 1. DML(data manipulation language 数据操作语言):insert update delete select 2. DDL(data defin...
  • u012661010
  • u012661010
  • 2017年03月23日 15:06
  • 423

Oracle:高效插入大量数据经验之谈

前提:在做insert数据之前,如果是非生产环境,请将表的索引和约束去掉,待insert完成后再建索引和约束。   insert into tab1 select * from tab2; comm...
  • chuang123
  • chuang123
  • 2016年08月05日 10:33
  • 6719

用oracle存储过程创建表

create or replace procedure createtable(tname in varchar2) is SQLTEXT varchar2(400); v_creat...
  • u010525655
  • u010525655
  • 2017年01月17日 20:28
  • 1803

两个存储过程:一、使用存储过程动态创建数据表。二、插入新记录。

最近发现使用Sql的存储过程,可以大大减少程序的代码量。以后要考虑多多使用存储过程了。两个小技巧:一、使用存储过程动态创建数据表。/*过程功能:存储过程动态创建数据表注意事项:连接Sql语句的“单引号...
  • skyjacker
  • skyjacker
  • 2006年09月02日 08:19
  • 2482

批量插入数据 Oracle

在使用 Oracle 开发期间,或许我们会为编写一条一条插入语句而困恼,这里给出 对数据表进行简单批量插入的例子。 (以下均是Oracle 数据库操作)向CBAY_USER_T 批量插入数据(主...
  • qq_24452475
  • qq_24452475
  • 2016年09月11日 12:57
  • 7123

Oracle优化:大量数据插入或更新

最近遇到的一个面试题,印象很深记录如下: 面试官:现在有一张表数据量达很大,要把里面记录时间的那行更新到当前最新日期,每次更新都很卡,机器变慢影响业务,怎么优化。 我的想法是:大量的数据更新肯定会写记...
  • knuuy
  • knuuy
  • 2015年08月15日 10:42
  • 6167

利用数据库的存储过程批量建表和批量插入数据

//利用MySQL存储过程批量创建表 drop procedure if EXISTS `createtables`; DELIMITER $$ create procedure `crea...
  • sunny05296
  • sunny05296
  • 2017年12月20日 11:53
  • 50

数据库之存储过程创建表以及for循环插入数据

CREATE PROCEDURE P_TEST1 IS V_SQL VARCHAR2(1000); BEGIN v_sql := 'CREATE TABLE P_TEST1_TABLE(P_ID NU...
  • nightwar
  • nightwar
  • 2014年08月27日 17:47
  • 1212

Oracle千万条记录插入与查询小结

最近做了个项目,实现对存在千万条记录的库表进行插入、查询操作。原以为对数据库的插入、查询是件很容易的事,可不知当数据达到百万甚至千万条级别的时候,这一切似乎变得相当困难。几经折腾,总算完成了任务。在此...
  • sweetsoft
  • sweetsoft
  • 2017年03月12日 15:26
  • 993

oracle解决客户端插入数据中文乱码

oracle防止乱码 需要oracle安装环境字符集、server服务器字符集和客户端字符集三者一致 通过在plsql中执行以下语句来判断: select * from V$nls_Parameter...
  • shienquan
  • shienquan
  • 2016年09月01日 23:14
  • 1973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle的存储过程中新建表后,怎么往表里面插入数据。
举报原因:
原因补充:

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