Die übergabe-TABELLE geben Sie als parameter für PLSQL-Verfahren
Ich habe eine plsql-block wie so dass im Grunde setzt Reihe von flags, die in einer Sammlung zu führen Prozeduren in einem Paket:
declare
TYPE tRunFlagRec IS RECORD(tRunFlag BOOLEAN);
TYPE tRunFlagTab IS TABLE OF tRunFlagRec INDEX BY VARCHAR2(64);
vValidationsTab tRunFlagTab;
begin
vValidationsTab('some_validation_1').tRunFlag := true;
vValidationsTab('some_validation_2').tRunFlag := true;
vValidationsTab('some_validation_3').tRunFlag := true;
vValidationsTab('some_validation_4').tRunFlag := true;
owner.validation_pkg.main(pRunFlags => vValidationsTab);
end;
Sowie ein Verfahren, mit einigen if-Anweisungen, die Aufrufe von anderen Verfahren auf der Grundlage der flags, die es erhält:
--declared in package
TYPE tRunFlagRec IS RECORD(tRunFlag BOOLEAN);
TYPE tRunFlagTab IS TABLE OF tRunFlagRec INDEX BY VARCHAR2(64);
vValidationsTab tRunFlagTab;
PROCEDURE MAIN(pRunFlags in tRunFlagTab) IS
vSome_validation_1_FLAG BOOLEAN := pRunFlags('FLAG_1').tRunFlag;
vSome_validation_2_FLAG BOOLEAN := pRunFlags('FLAG_2').tRunFlag;
vSome_validation_3_FLAG BOOLEAN := pRunFlags('FLAG_3').tRunFlag;
vSome_validation_4_FLAG BOOLEAN := pRunFlags('FLAG_4').tRunFlag;
BEGIN
DBMS_OUTPUT.PUT_LINE('Checking for 1');
IF vSome_validation_1_FLAG THEN
GET_SOME_VALIDATION_1();
ELSE
DBMS_OUTPUT.PUT_LINE('Run Flag set to False. Skipping...');
END IF;
DBMS_OUTPUT.PUT_LINE('Checking for 2');
IF vSome_validation_2_FLAG THEN
GET_SOME_VALIDATION_2();
ELSE
DBMS_OUTPUT.PUT_LINE('Run Flag set to False. Skipping...');
END IF;
DBMS_OUTPUT.PUT_LINE('Checking for 3');
IF vSome_validation_3_FLAG THEN
GET_SOME_VALIDATION_3();
ELSE
DBMS_OUTPUT.PUT_LINE('Run Flag set to False. Skipping...');
END IF;
DBMS_OUTPUT.PUT_LINE('Checking for 4');
IF vSome_validation_4_FLAG THEN
GET_SOME_VALIDATION_4();
ELSE
DBMS_OUTPUT.PUT_LINE('Run Flag set to False. Skipping...');
END IF;
END;
Ich bin immer der Fehler: PLS-00306: falsche Anzahl oder Typen der Argumente im Aufruf von 'MAIN'. Irgendwelche Ideen?
- möglich, Duplikat der PLS-00306: falsche Anzahl oder Typen der Argumente in Aufruf von "OUTPUT_ARRAY'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht redeclare verpackt Arten in lokalen code. Die
tRunFlagRec
undtRunFlagTab
Typen, die Sie erklären in Ihrem anonymen PL/SQL-Blöcke sind anders als die Typen mit ähnlichen Namen, die deklariert sind, in das Paket, so dass Sie nicht verwenden können, Sie sind austauschbar. Verwenden Sie einfach die gepackte Typen in der anonymen PL/SQL blockSchritt 1 - Erstellen eines Pakets so, dass die Erklärung konsistent sein kann für beide Aufrufer und aufgerufene
Schritt 2 - Dies ist, wo Sie setzen Ihre Logik, die ich kommentiert habe, die paar Zeilen, aber Sie können un-Kommentare in Ihrem code, Sie sind gerade nach vorne
Schritt 3 - Rufen Sie die Prozedur in Schritt 2 Erstellt haben