我在Oracle嵌套过程中声明引用表列类型的变量时出错。我使用的是DBeaver社区23。0.3.202304240616.
代码如下:
DECLARE
GLOBAL_VAR AREA.AREA_CD_AREA_UID%TYPE := 0;
PROCEDURE SUB_TEST(SUB_PAR NUMBER)
IS
SUB_VAR_1 NUMBER := 0;
SUB_VAR_2 AREA.AREA_CD_AREA_UID%TYPE := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE('SUB_TEST');
END SUB_TEST;
BEGIN
DBMS_OUTPUT.PUT_LINE(GLOBAL_VAR);
SUB_TEST(1);
END;
错误是
Error occurred during SQL script execution
Reason:
SQL Error [6550] [65000]: ORA-06550: line 9, column 14:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
begin function pragma procedure
如果我删除SUB_VAR_2声明,并且GLOBAL_VAR显示类型有效,则可以工作。
本文有一些子程序示例,但没有一个在嵌套过程中使用自定义类型。有一个行类型的,它也适用于我改变SUB_VAR_2
类型为AREA%ROWTYPE
。
编辑1
根据要求,使用ROWTYPE工作的代码:
DECLARE
GLOBAL_VAR AREA.AREA_CD_AREA_UID%TYPE := 0;
PROCEDURE SUB_TEST(SUB_PAR NUMBER)
IS
SUB_VAR_1 NUMBER := 0;
-- SUB_VAR_2 AREA.AREA_CD_AREA_UID%TYPE := 0;
SUB_REC AREA%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('SUB_TEST');
END SUB_TEST;
BEGIN
DBMS_OUTPUT.PUT_LINE(GLOBAL_VAR);
SUB_TEST(1);
END;
1条答案
按热度按时间n7taea2i1#
当我在Oracle 21c XE上运行此命令时
我明白了
我也是这么想的。
所以我能想到的是,这可能是你的数据库有问题,或者是你的问题中排除的一些代码有问题。