解析 – Oracle的PL / SQL块语法图是否错误?
我怀疑plsql_block的语法图如下所示
下面的PL / SQL编译很好: declare cursor cursor_definition is select * from dual; variable_declaration number; begin null; end; 以下语句是我基于上面的PL / SQL并基于Oracle的语法图进行的假设. > declare部分(上面)包含一个游标定义,后跟一个变量声明(后者又是一个项目声明). 现在,光标定义后面的变量声明与第4点相矛盾.因此我得出结论 也许我忽略了一些东西,在这种情况下,我会非常感激地向我指出这一点. 请理解错误的语法图本身对我来说没什么大不了的.但我正在编写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的原因的机会:-) (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |