ORACLE 學習筆記

时间:2021-12-29 09:18:56
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;