gpt4 book ai didi

parsing - Oracle 的 PL/SQL block 的语法图有错吗?

转载 作者:行者123 更新时间:2023-12-01 01:26:53 25 4
gpt4 key购买 nike

我怀疑 plsql_block 的语法图如在
第 2 版的 Oracle® 数据库 PL/SQL 语言引用是错误的。
(供引用,该文档的 here's the current link)

下面这段 PL/SQL 编译得很好:

declare

cursor
cursor_definition
is select * from dual;

variable_declaration number;

begin
null;
end;

以下陈述是我根据上面的 PL/SQL 片段和 Oracle 的语法图做出的假设。
  • 声明部分(上面)包含一个 cursor definition后跟一个 variable declaration (这又是一个 item declaration )。
  • item declaration只能是 item list 1 的一个元素.
  • 一个 cursor definition只能是 item list 2 的一个元素.
  • item list 2后面永远不能跟 item list 1 .

  • 现在, variable declaration关注 cursor definition与第 4 点矛盾。因此我的结论是
    语法图有误。

    也许我忽略了一些东西,在这种情况下,我会非常感谢向我指出这一点。

    请理解错误的语法图本身对我来说没什么大不了的。但是我正在写一个PL/SQL解析器
    并且解析器在示例 PL/SQL 代码给出的确切情况下绊倒了。所以,为了改进解析器,我想
    有一个更权威的序列图。

    最佳答案

    我同意。语法图明确指出 plsql_block有效 item_list_2前面是可选的 item_list_1 .

    此外,游标定义(带有 is 位)只能出现在 item_list_2 中。和变量声明(带或不带 =)是 item_declaration 的一部分设置,因此只能在 item_list_1 .

    这些事实使您的代码示例不正确,因此,如果它设法编译,则:

  • 语法图错误;或
  • 编译器并没有完全遵循它们;或
  • 您正在查看不同语法图所涵盖的代码。

  • 在最后一个要点上,有趣的是, syntax diagrams for 11.1略有不同。

    声明部分可以是 item_list_1item_list_2item_list_1其次是 item_list_2 .

    有趣的是 item_list_1可以有任意数量的 item_declaration条目,这包括 variable_declarationcursor_declaration .

    在 11.1 中,一个 cursor_declaration可以是声明或定义,基于 11.2 中的语言元素(换句话说,没有 cursor_definition 类型,因为声明允许在声明中两者)。

    所以你所拥有的在 11.1 中是完全有效的,所以我要检查的第一件事是你实际上正在运行 11.2,在那里成功编译。

    当然,你运行的是 11.2 并且语法图是错误的,这种情况下你应该向 Oracle 苦苦提示,但我不知道你会从一家旗舰数据库产品可以的公司得到什么样的回应。不区分空 varchar和一个 NULL (a)。

    (a) 我永远不会放弃提及这一点并推进我心爱的 DB2 事业的机会 :-)

    关于parsing - Oracle 的 PL/SQL block 的语法图有错吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7174937/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com