【发布时间】:2015-03-29 06:41:56
【问题描述】:
我有一个这样的 plsql 块,它基本上在集合中设置一堆标志来运行包中的过程:
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;
还有一个带有一些 if 语句的过程,它根据接收到的标志调用其他过程:
--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;
我收到错误:PLS-00306:调用“MAIN”时参数的数量或类型错误。有什么想法吗?
【问题讨论】: