0
複数の行をストアドプロシージャに渡す必要があります。参照カーソルは使用できますか?私は次のことを試してみましたので:PL/SQLストアドプロシージャrefカーソルをパラメータとして使用
私のパッケージの中に私が持っている:
TYPE FACT_VND_RECORD
IS
RECORD
(
COD_NOMCPDT P6PCM2_PARMCMS.COD_NOMCPDT%TYPE,
LIB_LIBNOMCPDT P6PCM2_PARMCMS.LIB_LIBNOMCPDT%TYPE,
DHS_MAJ P6PCM2_PARMCMS.DHS_MAJ%TYPE,
LIB_AUTH_MAJ P6PCM2_PARMCMS.LIB_AUTH_MAJ%TYPE);
TYPE FACT_VND_CURSOR
IS
REF
CURSOR
RETURN FACT_VND_RECORD;
と2の手順:
PROCEDURE REC_FACT_VND(
P_IN_NUM_VND IN OUT P6PCM2_PARMCMS.NUM_VND%TYPE,
P_OUT_FACT_VND IN OUT FACT_VND_CURSOR,
P_OUT_CODE_RET OUT INTEGER,
P_OUT_MSG_ERR OUT VARCHAR2);
PROCEDURE MAJ_FACT_VND(
P_IN_NUM_VND IN OUT P6PCM2_PARMCMS.NUM_VND%TYPE,
P_IN_FACT_VND IN OUT FACT_VND_CURSOR,
P_OUT_CODE_RET OUT INTEGER,
P_OUT_MSG_ERR OUT VARCHAR2);
は、以前に満たされたカーソルをRecievesとデータで何かを行います。
私はこれらの2つの呼び出しを使用します。最初のものは正常に動作し、参照カーソルC1の中のデータを見ることができ、次にそれを使用しようとします。それが定義されていないので、私はデータを反復処理することができません
C1 PACK_REC_FACT_VND.FACT_VND_CURSOR;
--other definitons
PACK_REC_FACT_VND.REC_FACT_VND(NUM_VND,C1,COD_RET,MSG_ERR);
PACK_REC_FACT_VND.MAJ_FACT_VND(NUM_VND,C1,COD_RET,MSG_ERR);
: (第2の手順からコード)
LIGNE_TAUX PACK_REC_FACT_VND.FACT_VND_RECORD;
BEGIN
DELETE FROM P6PCM2_PARMCMS WHERE NUM_VND=P_IN_NUM_VND;
FOR LIGNE_TAUX IN P_IN_FACT_VND
LOOP
INSERT
INTO P6PCM2_PARMCMS VALUES
(
P_IN_NUM_VND,
LIGNE_TAUX.COD_NOMCPDT,
LIGNE_TAUX.LIB_LIBNOMCPDT,
LIGNE_TAUX.DHS_MAJ,
LIGNE_TAUX.LIB_AUTH_MAJ);
END LOOP;
Error(48,21): PLS-00221: 'P_IN_FACT_VND' is not a procedure or is undefined
または私はRECORD OF TABLEに切り替える必要がありますか?
レコードのテーブルは私の第2の思考でした。私は試してみましょう!答えが来る。 – Samson
レコードのテーブルを入力パラメータに切り替えました。なぜなら、それは安全に使うためです:とにかく10x – Samson