到现在,写过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中的每一条记录,循环执行
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
--
{
-- @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;
/