Oracle自增字段的创建(转)
在SQLServer数据库中,本身含有自增字段这种类型。
但Oracle中却没有,我们可以用触发器trigger的功能来实现它:
--created by http://hi.baidu.com/fjqzax date 20080327
1、首先建立一个创建自增字段的存储过程
create or replace procedure pro_create_seq_col
(tablename varchar2,columnname varchar2)
as
strsql varchar2(1000);
begin
strsql := 'create sequence seq_'||tablename||' minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache';
execute immediate strsql;
strsql := 'create or replace trigger trg_'||tablename||' before insert on '||tablename||' for each row begin select seq_'||tablename||'.nextval into :new.'||columnname||' from dual; end;';
execute immediate strsql;
end;
/
2、Oracle中执行动态SQL时要显示授权(即使该用户拥有该相关权限)
GRANT CREATE ANY SEQUENCE TO UserName;
GRANT CREATE ANY TRIGGER TO UserName;
3、重新Compile存储过程pro_create_seq_col;
4、搞定,下面我们就可以用这个存储过程建立自增自段了。
5、调用存储过程建立自增字段(提示: 第一个参数是表名,第二个参数为自增字段的名字)
exec pro_create_seq_col('sb_zsxx','zsxh');
exec pro_create_seq_col('sb_sbxx','sbxh');
exec pro_create_seq_col('sb_jkx','pzxh');
exec pro_create_seq_col('sdspfp','sysfpid');
... ...
----------------------------------------------
PLSQL创建顺序实例:
----------------------------------------------
--删除测试表
DROP TABLE T_SB_TTXX ;
--创建测试表
CREATE TABLE T_SB_TTXX AS SELECT * FROM SB_TTXX WHERE 1=2;
--为测试表增加测试字段
ALTER TABLE T_SB_TTXX ADD(SEQ_XH NUMBER(20));
--删除测试序列号
DROP sequence seq_T_SB_TTXX ;
--创建测试序列号
create sequence seq_T_SB_TTXX minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache;
--创建自动增加序列号的触发器
create or replace trigger trg_T_SB_TTXX before insert on T_SB_TTXX for each row
begin
select seq_T_SB_TTXX.nextval into :new.SEQ_XH from dual;
end;
/
--测试数据,往测试表插数据
INSERT INTO T_SB_TTXX
(ttxh,
pz_dm,
xtsphm,
yssphm,
kdtskxh,
wspzxh,
nsrdzdah,
sssq_q,
sssq_z,
kprq,
zsxm_dm,
zspm_dm,
skzl_dm,
sksx_dm,
se,
pzzl_dm,
pzlrr_dm,
ttlx_dm,
jmyy_dm,
jmyj_dm,
cktsgc_dm,
ckts_qylx_dm,
hgdm,
lhjhh,
ckts_zddh_bz,
tzlx_dm,
tzrq,
djzclx_dm,
hy_dm,
yskm_dm,
ysfpbl_dm,
ysfpbl_zy,
ysfpbl_ss,
ysfpbl_ds,
ysfpbl_xq,
ysfpbl_xz,
ysfpbl_xc,
zzsnsrlx_dm,
skgk_dm,
yhzl_dm,
yh_dm,
yhzh,
zfr_dm,
zfrq,
xhr_dm,
xhrq,
thrq,
thrq_jz,
jdxz_dm,
zgswry_dm,
skss_swjg_dm,
ttjg_dm,
nsr_swjg_dm,
swjg_dm,
lrr_dm,
lrrq,
xgr_dm,
xgrq)
SELECT ttxh,
pz_dm,
xtsphm,
yssphm,
kdtskxh,
wspzxh,
nsrdzdah,
sssq_q,
sssq_z,
kprq,
zsxm_dm,
zspm_dm,
skzl_dm,
sksx_dm,
se,
pzzl_dm,
pzlrr_dm,
ttlx_dm,
jmyy_dm,
jmyj_dm,
cktsgc_dm,
ckts_qylx_dm,
hgdm,
lhjhh,
ckts_zddh_bz,
tzlx_dm,
tzrq,
djzclx_dm,
hy_dm,
yskm_dm,
ysfpbl_dm,
ysfpbl_zy,
ysfpbl_ss,
ysfpbl_ds,
ysfpbl_xq,
ysfpbl_xz,
ysfpbl_xc,
zzsnsrlx_dm,
skgk_dm,
yhzl_dm,
yh_dm,
yhzh,
zfr_dm,
zfrq,
xhr_dm,
xhrq,
thrq,
thrq_jz,
jdxz_dm,
zgswry_dm,
skss_swjg_dm,
ttjg_dm,
nsr_swjg_dm,
swjg_dm,
lrr_dm,
lrrq,
xgr_dm,
xgrq
FROM SB_TTXX;
COMMIT;
--查看测试结果
SELECT t.seq_xh,t.* FROM T_SB_TTXX t;
--删除测试表
DROP TABLE T_SB_TTXX;
转载于:https://www.cnblogs.com/earl86/archive/2008/06/26/1666565.html
Oracle自增字段的创建(转)相关推荐
- ORACLE自增字段创建方法
oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 假设关键字段为id,建一个序列,代码为: create sequence seq_ ...
- oracle字段加约束,Oracle数据库的字段约束创建和维护示例
创建Oracle数据库的字段约束: 非空约束 唯一约束 对字段的取值的约束 默认值 外键约束 create table tab_class( class_id number primary key, ...
- db2主键自增和oracle,oracle_浅析常用数据库的自增字段创建方法汇总,DB2复制代码 代码如下:CREATEnbsp - phpStudy...
浅析常用数据库的自增字段创建方法汇总 DB2 CREATE TABLE T1 ( id INTEGER NOT NULL GENERATED ALWAYS AS IDENTIT ...
- Oracle自增列创建方法
最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同. Oracle没有自增字段这样的功能,但是通过触发器( ...
- ORACLE表唯一自增字段
ORACLE表唯一自增字段 前言:最近项目使用Oracle,频繁需要使用自增且唯一字段,这里记录一下两种实现自增唯一字段的方式 1. 直接创建自增唯一字段的表 建表: create table Uni ...
- oracle的增删改表字段
oracle的增删改表字段 简单示例 1.添加字段: alter table 表名 add (xxx varchar2(48)/integer, xxx varchar2(48)/integer); ...
- sqlite3自增key设定(创建自增字段)
在用sqlite设计表时,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,但是由s ...
- Oracle 使用序列插入表自增字段(主键)
序列(Sequence) 是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用途是生产表的主键值,可以在插入语句中引用,也可以通过查询 ...
- sql oracle 自增长字段,在Oracle、MySQL、MS SQL Server中创设自动增长字段
在Oracle.MySQL.MS SQL Server中创建自动增长字段 好吧,今天面试有道题,要各个数据库怎么建立自增长字段,顺便复习一下吧,最近面试很多数据库问题... 一:Oracle Orac ...
最新文章
- 【异常】 ‘ascii‘ codec can‘t decode byte 0xe8 in position 2: ordinal not in range(128)
- javascript之值传递与引用传递
- OpenGL创建窗口
- [TCP/IP] TCP如何保证可靠性
- 【阿里妈妈营销科学系列】开篇:C.M.O——“人群.渠道.机会”营销分析导论
- php自动加载指定目录下的类文件
- 探索Java日志的奥秘:底层日志系统-log4j2
- LINUX警告:检测到时钟错误。您的创建可能是不完整的。-转
- Spark核心RDD详述
- 解决position:fixed抖动的问题
- Oracle数据库安装与配置
- 易优插件采集伪原创发布插件免费
- 扫码下载apk文件浏览器会直接打开并显示乱码的问题
- 天翼网关未欠费有信号且不能上网解决办法
- 2021年起重机械指挥考试题库及起重机械指挥最新解析
- python3连接mysql获取ansible动态inventory脚本
- 在CentOS7上源码安装MongoDB 3.2.7
- 彻底解决Eclipse自动补全变量名问题的方法步骤
- MySQL Status意义
- java图片头像代码_用Java和OpenCV生成Github默认头像