到現在,寫過2,3百個oralce預存程序,函數,觸發器等,寫過1百多個sql server的預存程序.下面貼一個我寫的第一個oracle預存程序,見證成長的曆程吧,呵呵
-- 功能: 複製使用者
-- 建立人: applegreen
-- 更新時間: 2004-8-18
CREATE OR REPLACE PROCEDURE p_copy_user_rights
(olduserid IN NUMBER,
newusername IN CHAR,
newpassword IN CHAR,
newuserdesc IN CHAR
)
IS
p_USER_ID NUMBER(38);
p_USER_NAME CHAR(10);
p_USER_PASSWORD CHAR(100);
p_USER_DESC VARCHAR2(40);
CURSOR c1 IS select GROUP_ID from T_USR_GROUP_ASS where user_id= oldUserId;
c1_group_id T_USR_GROUP_ASS.GROUP_ID%type;
CURSOR c2 IS select ROLE_ID,DATA_RIGHT from T_USR_ROLE_ASS where usr_id= oldUserId;
c2_role_id T_USR_ROLE_ASS.ROLE_ID%type;
c2_data_right T_USR_ROLE_ASS.DATA_RIGHT%type;
BEGIN
-- **************** step1 更新使用者資訊表 ****************
-- 變數 p_USER_ID
select SHEET_NO+1 into p_USER_ID from T_BI_SHEET_NO where SHEET_NAME='user_id';
-- 變數 p_USER_NAME = newusername;
p_USER_NAME := newusername;
-- 變數 p_USER_PASSWORD
p_USER_PASSWORD :=newpassword;
-- 變數 p_USER_DESC
-- select USER_DESC into p_USER_DESC from T_USR_USR where USER_ID =olduserid;
p_USER_DESC :=newuserdesc;
-- 執行插入T_USR_USR
insert into T_USR_USR (USER_ID,USER_NAME,USER_PASSWORD,USER_CREATE_DATE,USER_UPD_DATE,USER_DESC)
values (p_USER_ID,p_USER_NAME,p_USER_PASSWORD,sysdate,sysdate,p_USER_DESC);
-- 執行更新T_BI_SHEET_NO
update T_BI_SHEET_NO set SHEET_NO=p_USER_ID where SHEET_NAME='user_id';
-- **************** step2: 更新使用者組表 ****************
-- 建議一個暫存資料表temp:
-- 將sql語句:select * from T_USR_GROUP_ASS where user_id= @oldUserId 查詢到temp中,
-- 對於temp中的每一條記錄,迴圈執行
-- {
-- @GROUP_ID=temp.group_id;
-- @USER_ID=(select (T_BI_SHEET_NO. user_id) from T_BI_SHEET_NO )+1;
-- 將新資訊插入資料庫中
-- }到迴圈結束
OPEN c1;
LOOP
fetch c1 into c1_group_id;
exit when c1%notfound;
IF c1_group_id IS NOT NULL THEN
BEGIN
insert into T_USR_GROUP_ASS(USER_ID,GROUP_ID,UPD_DATE)
values (p_USER_ID,c1_group_id,sysdate);
END;
END IF;
END LOOP;
CLOSE c1;
-- **************** step3: 更新使用者權限表 ****************
-- 建議一個暫存資料表temp
-- 將sql語句select USR_ID,ROLE_ID,DATA_RIGHT,UPD_DATE
-- from T_USR_ROLE_ASS
-- where T_USR_ROLE_ASS.USR_ID= @oldUserId 選擇到temp中.
-- 對於temp中的每一條記錄,迴圈執行
-- @ROLE_ID=temp.role_id
-- @USER_ID=(select (T_BI_SHEET_NO. user_id) from T_BI_SHEET_NO )+1;
-- }直到迴圈結束為止
OPEN c2;
LOOP
fetch c2 into c2_role_id,c2_data_right;
exit when c2%notfound;
IF c2_role_id IS NOT NULL THEN
BEGIN
insert into T_USR_ROLE_ASS(USR_ID,ROLE_ID,DATA_RIGHT,UPD_DATE)
values (p_USER_ID,c2_role_id,c2_data_right,sysdate);
END;
END IF;
END LOOP;
CLOSE c2;
END;
/