CREATE OR REPLACE PACKAGE BODY PNPC_DMS_PKG is
PROCEDURE PNPC_SP_INSERT_CUST (pCT_CODE SIMS_CUST.CT_CODE%TYPE)
AS
CNT INTEGER DEFAULT 0;
CURSOR C_TMP IS SELECT * FROM PNPC_SALES WHERE WS_CODE = pCT_CODE ORDER BY SEQ;
BEGIN INSERT INTO PNPC_SALES VALUES ('TEST');
COMMIT(); FOR C IN C_TMP LOOP
DBMS_OUTPUT.PUT_LINE('执行游标循环');
END LOOP
EXCEPTION WHEN OTHERS THEN NULL;
INSERT INTO PNPC_LOG VALUES ( '['||TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS')||']PNPC_SP_INSERT_CUST==>EXCEPTION '||pCT_CODE||', '||pCT_NAME||', '||pCT_ADDRESS );
END PNPC_SP_INSERT_CUST;
大致代码如上,PNPC_SALES表中没有数据,为什么我执行exec PNPC_SP_INSERT_CUST('TEST')后,
DBMS_OUTPUT.PUT_LINE('执行游标循环')还能打出来我有点不明白是否FOR...IN...LOOP是否在执行的时候会在去调用一次
语句来查下,而不是使用先前的结果集来遍历
PROCEDURE PNPC_SP_INSERT_CUST (pCT_CODE SIMS_CUST.CT_CODE%TYPE)
AS
CNT INTEGER DEFAULT 0;
CURSOR C_TMP IS SELECT * FROM PNPC_SALES WHERE WS_CODE = pCT_CODE ORDER BY SEQ;
BEGIN INSERT INTO PNPC_SALES VALUES ('TEST');
COMMIT(); FOR C IN C_TMP LOOP
DBMS_OUTPUT.PUT_LINE('执行游标循环');
END LOOP
EXCEPTION WHEN OTHERS THEN NULL;
INSERT INTO PNPC_LOG VALUES ( '['||TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS')||']PNPC_SP_INSERT_CUST==>EXCEPTION '||pCT_CODE||', '||pCT_NAME||', '||pCT_ADDRESS );
END PNPC_SP_INSERT_CUST;
大致代码如上,PNPC_SALES表中没有数据,为什么我执行exec PNPC_SP_INSERT_CUST('TEST')后,
DBMS_OUTPUT.PUT_LINE('执行游标循环')还能打出来我有点不明白是否FOR...IN...LOOP是否在执行的时候会在去调用一次
语句来查下,而不是使用先前的结果集来遍历
PROCEDURE PNPC_SP_INSERT_CUST (pCT_CODE SIMS_CUST.CT_CODE%TYPE)
AS
CNT INTEGER DEFAULT 0;
CURSOR C_TMP IS SELECT * FROM PNPC_SALES WHERE WS_CODE = pCT_CODE ORDER BY SEQ;
BEGININSERT INTO PNPC_SALES VALUES ('TEST');
COMMIT(); FOR C IN C_TMP LOOP
DBMS_OUTPUT.PUT_LINE('执行游标循环');
END LOOP
EXCEPTION WHEN OTHERS THEN NULL;
INSERT INTO PNPC_LOG VALUES ( '['||TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS')||']PNPC_SP_INSERT_CUST==>EXCEPTION '||pCT_CODE||', '||pCT_NAME||', '||pCT_ADDRESS );
END PNPC_SP_INSERT_CUST; 楼主在procedure 中插入TEST数据了,所以使用C_TMP游标的时候当然能查询到数据FOR...IN...LOOP游标不会重新打开
对,我就是想测试FOR..IN..LOOP才插数据的,那么是不是说在使用FOR...IN...LOOP的时候会重新使用一次
SELECT * FROM PNPC_SALES WHERE WS_CODE = pCT_CODE ORDER BY SEQ来查询一次库,而不是说代码顺序执行,C_TMP第一次进来查不到数据结果集是空的然后我又插了一次数据库,FOR C IN C_TMP LOOP使用的是最新的结果集
是这样吗