试图声明一个游标,但我被文件结尾击中了! (甲骨文 SQL)

Posted

技术标签:

【中文标题】试图声明一个游标,但我被文件结尾击中了! (甲骨文 SQL)【英文标题】:Trying to declare a cursor, but I'm getting hit with end of file! (Oracle SQL) 【发布时间】:2020-07-10 21:16:16 【问题描述】:

我目前正在学习 Oracle SQL,我现在正在使用游标。我知道这是一个小问题,而且可能很容易解决,但是我的声明语句正在拉出文件结尾错误。 (PLS-00103)

声明如下:

declare cursor CustCursor is select * from Customers where cust_email is null;

任何帮助都将不胜感激,也值得知道我遵循了 Sams Teach Yourself SQL Book 并且仍然遇到这些问题。

谢谢!

【问题讨论】:

【参考方案1】:

DECLARE 不能在宇宙中单独存在 - 它是 PL/SQL 块的一部分,它也至少需要 dummy BEGIN-END 的一部分.

这就是你所拥有的:

SQL> declare cursor CustCursor is select * from Customers where cust_email is null;
  2  /
declare cursor CustCursor is select * from Customers where cust_email is null;
                                                                             *
ERROR at line 1:
ORA-06550: line 1, column 78:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the
following:
begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior

这是您应该拥有的:

SQL> declare cursor CustCursor is select * from Customers where cust_email is null;
  2  begin
  3    null;
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL>

或者,正如 Ed Stevens 所说,把所有东西放在它所属的地方(尽管结果是一样的):

SQL> declare
  2    cursor CustCursor is select * from Customers where cust_email is null;
  3  begin
  4    null;
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL>

【讨论】:

为了更清楚什么是什么,我将“光标是...”放在一行中,将 DECLARE 保留在自己的一行中。更清楚地说明(希望如此!) CURSOR 是它自己的词汇元素。 . . 我的意图是表明“原始”陈述实际上是正确的 - 如果放入正确的环境,@EdS。但是,是的,我同意你的看法,所以我也发布了一个 prettier 示例。感谢您的评论!

以上是关于试图声明一个游标,但我被文件结尾击中了! (甲骨文 SQL)的主要内容,如果未能解决你的问题,请参考以下文章

可选展开 SKPhysics 错误

我试图捕捉刷卡的输入,但我被困在使用 C# Windows 窗体

PL/SQL - 声明带有由其他游标填充的表的游标时出错

OpenGL/GLUT 使骑行顺畅的简单问题

如何在 Oracle PL/SQL 过程的开始部分之后声明游标

PL/SQL:如何根据列值插入