一个简单的oracle存储过程

到现在,写过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; 
/ 
posted @ 2005-02-01 15:24  让心灵去旅行  阅读(642)  评论(0编辑  收藏  举报