加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

解析 – Oracle的PL / SQL块语法图是否错误?

发布时间:2021-01-17 07:05:59 所属栏目:站长百科 来源:网络整理
导读:我怀疑plsql_block的语法图如下所示 Relese 2的Oracle? DatabasePL / SQL语言参考是错误的. (供参考,here’s the current link到该文件) 下面的PL / SQL编译很好: declare cursor cursor_definition is select * from dual; variable_declaration number;be

我怀疑plsql_block的语法图如下所示
Relese 2的Oracle? DatabasePL / 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的语法图进行的假设.

> declare部分(上面)包含一个游标定义,后跟一个变量声明(后者又是一个项目声明).
>项目声明只能是项目列表1的元素.
>游标定义只能是项目列表2的元素.
>项目列表2永远不能跟随项目列表1.

现在,光标定义后面的变量声明与第4点相矛盾.因此我得出结论
语法图是错误的.

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

请理解错误的语法图本身对我来说没什么大不了的.但我正在编写PL / SQL解析器
并且解析器偶然发现了示例PL / SQL代码给出的确切情况.所以,为了改进解析器,我想
有一个更具说明性的序列图.

解决方法

我同意.语法图明确声明plsql_block实际上是item_list_2,前面是可选的item_list_1.

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

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

>语法图错了;要么
>编译器不遵循它们的字母;要么
>您查看不同语法图所涵盖的代码.

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

声明部分可以是item_list_1或item_list_2或item_list_1,后跟item_list_2.

令人感兴趣的是,item_list_1可以包含任意数量的item_declaration条目,这包括variable_declaration和cursor_declaration.

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

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

当然你仍然可以运行11.2并且语法图是错误的,在这种情况下你应该向Oracle抱怨,但我不知道你会从一家旗舰数据库产品可以获得什么样的响应告诉空varchar和NULL(a)之间的区别.

(a)我永远不会错过提及这个并提升我心爱的DB2的原因的机会:-)

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读