一个简单的oracle存储过程

博主分享编写数据库存储过程的经历,写过两三百个Oracle存储过程、函数、触发器等,一百多个SQL Server存储过程,还贴出第一个Oracle存储过程以见证成长,内容转载自相关博客。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

到现在,写过2,3百个oralce存储过程,函数,触发器等,写过1百多个sql server的存储过程.下面贴一个我写的第一个oracle存储过程,见证成长的历程吧,呵呵

None.gif-- 功能:  复制用户 
None.gif
-- 创建人: applegreen 
None.gif
-- 更新时间: 2004-8-18 
None.gifCREATE OR REPLACE PROCEDURE p_copy_user_rights 
None.gif       (olduserid  IN  NUMBER,  
None.gif         newusername  IN   CHAR,  
None.gif         newpassword IN CHAR,  
None.gif         newuserdesc IN CHAR 
None.gif ) 
None.gif IS  
None.gif           p_USER_ID       NUMBER(
38);  
None.gif           p_USER_NAME     CHAR(
10);  
None.gif           p_USER_PASSWORD CHAR(
100); 
None.gif           p_USER_DESC     VARCHAR2(
40);  
None.gif           CURSOR c1 IS    select GROUP_ID from T_USR_GROUP_ASS where user_id
= oldUserId;  
None.gif           c1_group_id     T_USR_GROUP_ASS.GROUP_ID
%type;  
None.gif           CURSOR c2 IS    select ROLE_ID,DATA_RIGHT from  T_USR_ROLE_ASS where usr_id
= oldUserId;  
None.gif           c2_role_id      T_USR_ROLE_ASS.ROLE_ID
%type;  
None.gif           c2_data_right   T_USR_ROLE_ASS.DATA_RIGHT
%type; 
None.gif       BEGIN 
None.gif
--   **************** step1 更新用户信息表 **************** 
None.gif
--   变量 p_USER_ID 
None.gif   select SHEET_NO
+1 into p_USER_ID from T_BI_SHEET_NO where SHEET_NAME='user_id'
None.gif
--   变量 p_USER_NAME = newusername; 
None.gif p_USER_NAME :
= newusername; 
None.gif
--   变量 p_USER_PASSWORD 
None.gif p_USER_PASSWORD :
=newpassword; 
None.gif
--   变量 p_USER_DESC 
None.gif
--   select USER_DESC into p_USER_DESC from T_USR_USR where USER_ID =olduserid; 
None.gif p_USER_DESC :
=newuserdesc; 
None.gif
--   执行插入T_USR_USR 
None.gif   insert into T_USR_USR (USER_ID,USER_NAME,USER_PASSWORD,USER_CREATE_DATE,USER_UPD_DATE,USER_DESC) 
None.gif   values (p_USER_ID,p_USER_NAME,p_USER_PASSWORD,sysdate,sysdate,p_USER_DESC); 
None.gif
--   执行更新T_BI_SHEET_NO 
None.gif   update T_BI_SHEET_NO 
set SHEET_NO=p_USER_ID where SHEET_NAME='user_id'
None.gif
--  **************** step2: 更新用户组表 **************** 
None.gif
--   建议一个临时表temp: 
None.gif
--   将sql语句:select * from T_USR_GROUP_ASS where user_id= @oldUserId 查询到temp中, 
None.gif
--   对于temp中的每一条记录,循环执行 
ExpandedBlockStart.gifContractedBlock.gif
--   dot.gif
InBlock.gif
--    @GROUP_ID=temp.group_id; 
InBlock.gif
--    @USER_ID=(select (T_BI_SHEET_NO. user_id) from T_BI_SHEET_NO )+1
InBlock.gif
--    将新信息插入数据库中 
ExpandedBlockEnd.gif
--   }
到循环结束 
None.gif OPEN c1; 
None.gif LOOP 
None.gif  fetch c1 into c1_group_id; 
None.gif  exit when c1
%notfound;   
None.gif  IF c1_group_id IS NOT NULL THEN 
None.gif  BEGIN 
None.gif   insert into T_USR_GROUP_ASS(USER_ID,GROUP_ID,UPD_DATE) 
None.gif   values (p_USER_ID,c1_group_id,sysdate); 
None.gif  END; 
None.gif  END IF; 
None.gif
None.gif END LOOP; 
None.gif   CLOSE c1; 
None.gif
-- **************** step3: 更新用户权限表 **************** 
None.gif
-- 建议一个临时表temp 
None.gif
-- 将sql语句select USR_ID,ROLE_ID,DATA_RIGHT,UPD_DATE 
None.gif
--  from T_USR_ROLE_ASS 
None.gif
--  where T_USR_ROLE_ASS.USR_ID= @oldUserId 选择到temp中. 
None.gif
-- 对于temp中的每一条记录,循环执行 
None.gif
--  @ROLE_ID=temp.role_id 
None.gif
--  @USER_ID=(select (T_BI_SHEET_NO. user_id) from T_BI_SHEET_NO )+1
None.gif
-- }直到循环结束为止 
None.gif OPEN c2; 
None.gif LOOP   
None.gif  fetch c2 into c2_role_id,c2_data_right; 
None.gif  exit when c2
%notfound; 
None.gif  IF c2_role_id IS NOT NULL THEN 
None.gif   BEGIN 
None.gif   insert into T_USR_ROLE_ASS(USR_ID,ROLE_ID,DATA_RIGHT,UPD_DATE) 
None.gif   values (p_USER_ID,c2_role_id,c2_data_right,sysdate); 
None.gif  END; 
None.gif  END IF; 
None.gif END LOOP; 
None.gif CLOSE c2; 
None.gif      END; 
None.gif
/ 
None.gif

转载于:https://www.cnblogs.com/applegreen/archive/2005/02/01/100412.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值