proc 里的 commit等于提交就是你做了insert或者update后,commit后才是真正修改或者插入了数据库中 如果不提交的话,那么这个表就被锁了
CURSOR MYCURSOR is --定義游標
SELECT A.APPLYKIND_NO,A.FAC_NO,A.BUILDING_NO,A.DEPTKIND_NO,A.DUTYRANK_NO,A.APPROVAL_SORT,A.APPROVALRANK_NO,
A.APPDEPT_NO,A.APPROVAL_TYPE,NVL(A.APPROVAL_MK,‘N‘) APPROVAL_MK
FROM APPROVALSET_DUTY A
WHERE A.APPLYKIND_NO=VAPPLYKIND_NO
AND A.FAC_NO=VFAC
AND A.BUILDING_NO=NVL(VBUILDING,‘A‘)
AND A.DEPTKIND_NO=(SELECT DEPTKIND_NO FROM APPDEPT WHERE APPDEPT_NO=VAPPDEPT_NO)
AND A.DUTYRANK_NO=VDUTYRANK_NO;
BEGIN
VFAC:=VFAC_NO;
if VFAC_NO=‘HR‘ THEN
VFAC:=‘311‘;
END IF;
IF VFAC_NO=‘HGHR‘ THEN
VFAC:=‘346‘;
END IF;
OPEN MYCURSOR; 開啟游標
LOOP --循环开始标志
--
FETCH MYCURSOR into VVAPPLYKIND_NO,VVFAC_NO,VVBUILDING_NO,VVDEPTKIND_NO,VVDUTYRANK_NO,
VVAPPROVAL_SORT,VVAPPROVALRANK_NO,VVAPPDEPT_NO,VVAPPROVAL_TYPE,VVAPPROVAL_MK;
3、属性
3.1、%ISOPEN 判断游标是否被打开,若打开,则%ISOPEN等于TRUE;否则等于FALSE。
3.2、%FOUND 判断游标所在行是否有效。若有效,则%FOUND等于TRUE;否则等于FALSE。
3.3、%NOTFOUND 与%FOUND相似,功能相反。
3.4、%ROWCOUNT 返回到当前位置为止,游标所读取的记录行数。
EXIT WHEN MYCURSOR%NOTFOUND;
-- DBMS_OUTPUT.PUT_LINE(‘aa‘||‘..‘||‘aa‘);--測試用
DELETE FROM APPROVAL_SET WHERE APPLY_NO=VAPPLY_NO AND APPDEPT_SORT=VVAPPROVAL_SORT;
DELETE FROM APPLY WHERE APPLY_NO=VAPPLY_NO ;
IF VVAPPROVAL_MK=‘Y‘ THEN
VAPPDEPT:=VAPPDEPT_NO;
ELSE
VAPPDEPT:= VVAPPDEPT_NO;
END IF;
INSERT INTO APPROVAL_SET(APPLY_NO,APPDEPT_SORT,APPLYKIND_NO,APPROVALRANK_NO,FAC_NO,APPDEPT_NO,APPROVAL_MK,APPROVAL_TYPE)
VALUES(VAPPLY_NO,VVAPPROVAL_SORT,VVAPPLYKIND_NO,VVAPPROVALRANK_NO,VVFAC_NO,VAPPDEPT,VVAPPROVAL_MK,VVAPPROVAL_TYPE);
INSERT INTO APPLY(APPLY_NO,APPLY_CONTENT,APPLY_DATE,FAC_NO,SEC_NO,APPLYDEPT_NO,APPLYKIND_NO,DUTYRANK_NO,APPLYUSER_NO,APPROVALFINISH_MK)
VALUES(VAPPLY_NO,VVFAC_NO||VSEC_NO||VAPPDEPT,VAPPLY_DATE,VVFAC_NO,VSEC_NO,VAPPDEPT,VVAPPLYKIND_NO,VDUTYRANK_NO,VAPPLYUSER_NO,‘N‘);
COMMIT;
END LOOP;
CLOSE MYCURSOR;
COMMIT;
end;