PLS-00103:在简单更新块中遇到符号“文件结尾”

Posted

技术标签:

【中文标题】PLS-00103:在简单更新块中遇到符号“文件结尾”【英文标题】:PLS-00103: Encountered the symbol "end-of-file" in simple update block 【发布时间】:2011-03-04 15:21:39 【问题描述】:

以下Oracle语句:

 DECLARE ID NUMBER;
 BEGIN
  UPDATE myusername.terrainMap 
  SET playerID = :playerID,tileLayout = :tileLayout 
  WHERE ID = :ID
 END;

给我以下错误:

ORA-06550: line 6, column 15:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 3, column 19:
PL/SQL: SQL Statement ignored
ORA-06550: line 6, column 18:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   ( begin case declare end exception exit for goto if loop mod
   null pragma raise return select update while with
   <an identifier> <a double-quoted>

我几乎不知所措。这似乎是一个相当简单的陈述。如果有帮助的话,我有一个类似的语句,它执行了一个过去可以工作的 INSERT,但今天一直在给我同样的信息。

【问题讨论】:

你是在 SQLPlus 中运行这个吗? 【参考方案1】:

除了前面的你必须防止相等操作之间的空格,:,和值 像这样:

SQL> BEGIN  
2    IF x > y THEN high := x; END IF;  -- correct

3    IF x > y THEN high := x; ENDIF;   -- incorrect

4  END;

5  /

END;
ERROR at line 4:
ORA-06550: line 4, column 4:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
if

访问该网站以了解更多信息...... https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/fundamentals.htm#LNPLS002

【讨论】:

【参考方案2】:

这里有很多问题:

    缺少分号(如 MJB 所见)

    :ID 指的是入站变量,因此您的本地声明 (DECLARE ID NUMBER;) 未被使用。

    您使用的变量名称(显然)与表中的列名称相同。如果您尝试使用本地 ID 变量,除非您使用块标签,否则查询仍不会使用它。

也就是说,您似乎还是将 ID 作为绑定变量发送,因此您更有可能只从块中删除声明。

【讨论】:

这就是为什么我问这是否在 SQLPlus 中。我无法理解他的绑定变量是如何被使用的。而且我认为这可能不是真正他正在运行的 - 这是他认为应该运行的代码的测试版本。【参考方案3】:

where id=:id后加分号

【讨论】:

@rageingnonsense :没问题。我想知道您是复制/粘贴还是丢失的分号是重新输入代码的产物。

以上是关于PLS-00103:在简单更新块中遇到符号“文件结尾”的主要内容,如果未能解决你的问题,请参考以下文章

错误(30,11):PLS-00103:遇到符号更新错误

(PLS-00103:在简单声明游标语句和循环选择数据期间遇到符号“;”)

错误 PLS-00103:遇到符号“DECLARE”?

PLS-00103 在 CASE 中遇到符号“”错误 [关闭]

PL/SQL 函数错误 - PLS-00103:遇到符号“IS”

PLS-00103:预期时遇到符号“(”