用存储过程 给表增加序列与触发器

存储过程如下:


create or replace procedure p_createseq(tablename in varchar2,key in varchar2)
Authid Current_User --使用角色权限,否则无法创建序列或表
is
strsql varchar2(500);
t_key varchar2(500);
begin
--创建序列
strsql:=‘create sequence seq_‘||tablename||
‘ minvalue 1000 maxvalue 99999999 start with 1 increment by 1 nocache‘;
execute immediate strsql;
--设置触发器默认主键名
if(key is NULL) then t_key := ‘ID‘ ;
else t_key := key;
end if;
--创建触发器
strsql := ‘CREATE OR REPLACE TRIGGER TRG_‘||tablename||‘
BEFORE INSERT ON ‘||tablename ||‘
FOR EACH ROW
BEGIN
SELECT SEQ_‘||tablename||‘.NEXTVAL INTO :NEW.‘||t_key||‘ FROM DUAL;
END; ‘;
execute immediate strsql;
end p_createseq;

  Authid Current_User 指明使用当前角色权限,否则无法创建表或者序列。默认存储过程无法使用当前角色权限。

用存储过程 给表增加序列与触发器,布布扣,bubuko.com

时间: 2024-10-03 13:46:14

用存储过程 给表增加序列与触发器的相关文章

oracle表,视图,存储过程,函数,序列.....查询

查询存储过程,函数,序列,表,视图的名字 select object_name from user_objects where object_type = 'PROCEDURE' select object_name from user_objects where object_type = 'FUNCTION' select object_name from user_objects where object_type = 'SEQUENCE' select object_name from

SQL 中怎么查询数据库中具有的表、存储过程、试图数目、总触发器数、作业数

用户表:select count(*) 总表数 from sysobjects where xtype='u' 刚才那个是用户表,下面这个是系统表加用户表: select count(*) 总表数 from sysobject s where xtype in('u','s') 总视图数:select count(*) 总视图数 from sysobjects where xtype='v' 总存储过程数:select count(*) 总存储过程数 from sysobjects where

Oracle序列和触发器的使用

Oracle不能直接设定某字段自增,需要通过建序列和触发器,实现主键的自增功能 一.序列 1,建序列 序列的语法格式为: CREATE SEQUENCE name //name为序列的名称 [INCREMENT BY n] //n序列的步长 [START WITH n] //n序列的初始值 [{MAXVALUE / MINVALUE n | NOMAXVALUE}] //n序列的最大值或最小值 [{CYCLE | NOCYCLE}] //序列达到最大值时是否循环 [{CACHE n | NOCA

oracle 主键应用序列和触发器实现自动增长

oracle 主键自动增长 这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下: create table simon_example ( id number(4) not null primary key, name varchar2(25) ) -- 建立序列: -- Create sequence create sequence SIMON_SEQUENCE minvalue 1 maxvalue 999999999999999999999999999 start with 1

Oracle中用序列和触发器实现ID自增

在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为主键的功能,这时Oracle可以通过"序列"和"触发器"来实现ID自动增加的功能. 1.创建序列Sequence create sequence seq_uid increment by 1 start with 1 nomaxvalue nocycle cache 10 ; 其中:"seq_uid"表示自定义的序列名称: "start with 1&q

Oracle中序列及触发器使用

总结一下这次使用的序列和触发器,也把相应的一些操作用了一下.遇到的问题比较奇葩,仅供参考. 一.序列部分(网上的) 1.建立序列SEQUENCE create sequence user_seq increment by 1 start with 1 minvalue 1 maxvalue 9999999999999 nocache order; 语法: CREATE SEQUENCE s_id NOMAXVALUE NOCYCLE --INCREMENT BY 1    -- 每次加几个 --

利用存储过程进行表数据分离的案例分享

某客户有个需求,有2张业务表,数据量比较大,有2000W行,现在的需求是把这2张表中的一部分记录,根据一定的where条件分离出去,创建到另外的归档表中,即做表记录的迁移操作.最后得到的结果是:未满足筛选条件的记录留在原表中,满足筛选条件的表要插入到归档表中,并且要在原表中删除这些插入到归档表中的全部记录,最后满足:新表记录+归档记录=原表记录数 下面我来模拟一下这个过程: 由于没有拿到具体的建表语句,这里把表的内容最简化,只留2个列,作为最基本的演示 --连接到测试用户,创建测试表 SQL>

为表增加一列属性(补充)

事情变得有意思了,上一篇花1小时撰写的"一分钟"文章,又引起了广泛的讨论,说明相关的技术大家感兴趣,挺好.第一次一篇技术文章的评论量过100,才知道原来"评论精选"还有100上限,甚为欣慰(虽然是以一种自己不愿看到的方式). <啥,又要为表增加一列属性?>的方案颇有争议: (1)版本号version + 扩展字段ext (2)用增加列的key+value方式扩充属性 有些评论,只能说"所谓夏虫,何以语冰"(作者要谦和,请删除).因自己

c#调用存储过程实现批量增加和修改数据

1 例如当我在编辑表格数据,一次编辑了多行需要保存到数据库时,就需要判断数据库中是否已经存在,存在则修改,不存在则新增一条或多条数据,即所谓批量增加或者跟新数据. 首先需要构建数据包,把要添加或者跟新的数据构建成一个datatable,例如我数据库中的表结构是这样 CREATE TABLE [dbo].[FlagDescription]( [FundId] [CHAR(10)] not null, [SurveyType] [tinyint] not null, [DefectReason] T