建立Sequence的儲存過程

2021-08-30 17:00:29 字數 1344 閱讀 5459

很多人都知道在oracle中並沒有像其他資料庫中的自增欄位,那麼我們怎樣才能實現oracle的自增欄位功能呢?下面我們通過oracle中的sequence和trigger來實現此功能。1、首先建立乙個建立自增字段的儲存過程//written by sun zhenfang 20040903

create or replace procedure pr_createidentitycolumn

(tablename varchar2,columnname varchar2)

asstrsql 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儲存過程pr_createidentitycolumn4、搞定,下面我們就可以用這個儲存過程建立自增自段了。5、呼叫儲存過程建立自增字段(note: 第乙個引數是表名,第二個引數為自增字段的名字)exec pr_createidentitycolumn('sdspdept','deptid');

exec pr_createidentitycolumn('sdspuser','userid');

exec pr_createidentitycolumn('sdspsysrole','sysroleid');

exec pr_createidentitycolumn('sdspfp','sysfpid');

exec pr_createidentitycolumn('sdspphasemodel','phasemodelid');

exec pr_createidentitycolumn('sdspphase','phaseid');

Mysql儲存過程(五) SEQUENCE的實現

在 oracle 中,sequence 提供多表多字段可共用乙個不重複值。mysql 中存在自增列,基本可以滿足 pk的要求。但自增列存在限制 a.只能用於表中的乙個字段,一張不能同時存在兩個以上的自增列 b.自增列必須被定義為 key pk或 fk c.自增列不能被多個表共用 d.當insert ...

Mysql儲存過程(五) SEQUENCE的實現

在 oracle 中,sequence 提供多表多字段可共用乙個不重複值。mysql 中存在自增列,基本可以滿足 pk 的要求。但自增列存在限制 a.只能用於表中的乙個字段,一張不能同時存在兩個以上的自增列 b.自增列必須被定義為 key pk 或 fk c.自增列不能被多個表共用 d.當 inse...

mysql 自定義 sequence 儲存過程

mysql本身是沒有sequence的但是我可以自己建立sequence儲存過程.首先我們先建立相關的表,和儲存過程.第一步是建立規則表.drop table if exists seq create table seq id bigint 11 not null auto increment,na...