Oracle PL/SQL编程:使用块标签区分变量

Oracle PL/SQL编程:使用块标签区分变量,oracle,plsql,plsqldeveloper,Oracle,Plsql,Plsqldeveloper,我已经编写了下面这行代码,并通过PL/SQL开发工具执行了相同的代码 我还在Oracle 11g数据库中创建了HR模式 代码 但是在执行第一个declare语句时,它抛出如下错误 ORA-06550: line 4, column 0: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: * & = - + ; < / > at in is mod r

我已经编写了下面这行代码,并通过PL/SQL开发工具执行了相同的代码

我还在Oracle 11g数据库中创建了HR模式

代码

但是在执行第一个declare语句时,它抛出如下错误

ORA-06550: line 4, column 0:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   * & = - + ; < / > at in is mod remainder not rem
   <an exponent (**)> <> or != or ~= >= <= <> and or like like2
   like4 likec between || multiset member submultiset

请指导我,因为我对PL/SQL非常陌生,目前正在自学。

您的代码很好,所以我想这是客户机的问题

PL/SQL Developer有不同类型的窗口——对于这种查询,您应该使用一个命令窗口,它本质上是一个SQL/Plus提示符


如果运行整个脚本不起作用,请尝试在SQL窗口中分别运行每个语句,您可以选择一个代码块并仅运行选择。

这是PL/SQL Developer lexer或解析器的错误。您可以通过将整个块封闭在另一个开始中来解决此问题。。。结束

SQL窗口同时适用于SQL和PL/SQL,但这两种语句类型具有不同的语法。编辑器窗口不需要完整的解析器。但它必须对一个语句有足够的了解,才能知道一个语句何时结束,另一个语句何时开始。有很多方法可以启动SQL语句,很少有方法可以启动PL/SQL块。代码可能使用这样的分类算法:如果它以begin或end开头,则为PL/SQL,否则为SQL。程序员可能忘记了PL/SQL可以以标签开头。因为解析器认为它是一个SQL语句,所以它在第一个分号处停止

您可以在下面的错误和突出显示中看到,它基于第一个分号拆分语句:

弗兰克·施密特的想法很好,通常都是针对这类问题。但在这种情况下,无论是命令窗口还是突出显示整个表达式都无法解决问题

唯一的解决办法似乎是添加一个额外的开始和结束块,如下所示:

--Add extra begin/end to work around PL/SQL Developer parser bug.
begin
    <<main>>
    declare
        v_test number := 1;
    begin
        main.v_test := 1;
    end;
end;
/

您是否尝试删除标签并运行它?
--Add extra begin/end to work around PL/SQL Developer parser bug.
begin
    <<main>>
    declare
        v_test number := 1;
    begin
        main.v_test := 1;
    end;
end;
/