ORA-00905运行update语句时

时间:2016-08-31 07:53:49

标签: sql oracle

我在Oracle中有以下更新声明

UPDATE PAY_PMT
SET INTER_COMPANY = CASE INTER_COMPANY_ID
WHEN 1 THEN 'Y';
ELSE 'N';
END CASE;
WHERE ID != 1
/

但是当我执行此操作时,我收到以下错误消息: ORA-00905:缺少关键字

有什么问题?

3 个答案:

答案 0 :(得分:1)

您刚刚在更新中使用了3个分号。在这种情况下,它意味着您有4个语句。 第一个是

Kernel

第二个是:

UPDATE PAY_PMT
SET INTER_COMPANY = CASE INTER_COMPANY_ID
WHEN 1 THEN 'Y';

第三是:

ELSE 'N';

第四是:

END CASE;

解决方案是仅在语句结尾处使用分号,并且案例不正确。

WHERE ID != 1

答案 1 :(得分:0)

When和Else之后的分号是错误的,使用别名的情况也不好

UPDATE PAY_PMT
SET INTER_COMPANY = CASE INTER_COMPANY_ID
WHEN 1 THEN 'Y'
ELSE 'N'
END 
WHERE ID != 1;

查询将在第一个停止;并移动到下一个块进行处理。

答案 2 :(得分:0)

添加更多内容:

当您在SQL * Plus中输入SQL语句时,它需要知道您何时完成它,特别是如果该命令跨越多行。因此,它需要一个终端字符字符,可以使用set sqlterminator进行设置。默认情况下,此字符是分号

这与更新声明的最后一行' /'有什么关系?

当您输入SQL语句时,SQL * plus会填充它称为缓冲区的内容。可以使用list命令显示此缓冲区:

SQL> list
  1  select *
  2  from
  3* dual
SQL>

(注意:我只输入了列表,其余的都返回了)

/ now现在执行缓冲区中当前的内容。让我们尝试:

SQL> /

D
-
X

可以看出,执行相同的查询。