/*
Privilege Grant to Role,再以 Dynamic SQL create objects
在 Oracle 上測試的結果:
會產生 Oracle insufficient privileges error, ‘ORA-01031.’
解決方法是,必須直接 grant 相關的 privileges 給 User
而在 DB2 上測試並不會發生這樣的問題
*/
/* 接上篇,給定createin權限給TestingUser */
C:\>db2 connect to sample user db2admin using db2admin
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = DB2ADMIN
本地資料庫別名 = SAMPLE
/* 讓 TestingUser 可以對 Orion 這個 schema 做 alter,create,drop */
C:\>db2 grant alterin,createin,dropin on schema orion to role role_o
DB20000I SQL 指令已順利完成。
C:\>db2 terminate
DB20000I TERMINATE 指令已順利完成。
C:\>db2 connect to sample user testinguser using testinguser
資料庫連線資訊
資料庫伺服器 = DB2/NT 9.5.0
SQL 授權 ID = TESTINGU...
本地資料庫別名 = SAMPLE
/*
用TestingUser create procedure ,內容是 dynamic recreate sequence
傳入參數 Sequence name
*/
CREATE PROCEDURE SP_CRTSEQ(in SeqName varchar(32))
SPECIFIC SP_CRTSEQ
LANGUAGE SQL
BEGIN
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE RETCODE INTEGER DEFAULT 0;
declare szStr varchar(128);
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,
SQLWARNING,
NOT FOUND
SET RETCODE = SQLCODE;
set szStr = 'DROP SEQUENCE ORION.' || Seqname;
EXECUTE IMMEDIATE szStr;
set szstr = 'create SEQUENCE ORION.' || Seqname ||
' start with 1 increment by 1';
EXECUTE IMMEDIATE szstr;
COMMIT;
END
/* 執行 */
C:\>db2 call sp_crtseq('seq2')
傳回狀態 = 0
C:\>db2 select orion.seq2.nextval from sysibm.sysdummy1
1
-----------
1
已選取 1 個記錄。