我在Oracle中有以下更新声明
UPDATE PAY_PMT
SET INTER_COMPANY = CASE INTER_COMPANY_ID
WHEN 1 THEN 'Y';
ELSE 'N';
END CASE;
WHERE ID != 1
/
但是当我执行此操作时,我收到以下错误消息: ORA-00905:缺少关键字
有什么问题?
答案 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
可以看出,执行相同的查询。