ORA-00922: 创建 PL/SQL 过程时选项丢失或无效
Posted
技术标签:
【中文标题】ORA-00922: 创建 PL/SQL 过程时选项丢失或无效【英文标题】:ORA-00922: missing or invalid option while creating PL/SQL procedure 【发布时间】:2018-09-10 10:10:11 【问题描述】:在创建 PL/SQL 过程时出现 ORA-00922 错误:缺少或无效选项,这里是过程。
CREATE OR REPLACE consession_calculate(item_ID IN NUMBER, CON_PRICE OUT NUMBER)
IS
PRICE NUMBER;
BEGIN
SELECT ITEM_PRICE INTO PRICE FROM ITEM WHERE ITEM_CODE=item_ID;
IF(PRICE<10) THEN
CON_PRICE:=PRICE;
ELSEIF(PRICE>=10 AND PRICE<=100) THEN
CON_PRICE:=(PRICE*10)*100;
ELSE
CON_PRICE:=(PRICE*20)*100;
END IF;
END;
/
【问题讨论】:
您在“创建或替换”中缺少 PROCEDURE 关键字,例如CREATE OR REPLACE PROCEDURE consession_calculate
。可能值得查看有关在 Oracle 中创建过程的文档
【参考方案1】:
你有一些问题:
您缺少PROCEDURE
关键字
ELSEIF
应该是 ELSE IF
你不见了,END IF
。
编辑后的代码:
CREATE OR REPLACE PROCEDURE consession_calculate(item_ID IN NUMBER, CON_PRICE OUT NUMBER) IS
PRICE NUMBER;
BEGIN
SELECT ITEM_PRICE
INTO PRICE
FROM ITEM
WHERE ITEM_CODE = item_ID;
IF (PRICE < 10)
THEN
CON_PRICE := PRICE;
ELSE
IF ( PRICE >= 10
AND PRICE <= 100)
THEN
CON_PRICE := (PRICE * 10) * 100;
ELSE
CON_PRICE := (PRICE * 20) * 100;
END IF;
END IF;
END;
/
或者,根据 a_horse_with_no_name 注意到的情况,您只能添加 PROCEDURE
并将 ELSEIF
编辑为 ELSIF
:
CREATE OR REPLACE PROCEDURE consession_calculate(item_ID IN NUMBER, CON_PRICE OUT NUMBER) IS
PRICE NUMBER;
BEGIN
SELECT ITEM_PRICE
INTO PRICE
FROM ITEM
WHERE ITEM_CODE = item_ID;
IF (PRICE < 10)
THEN
CON_PRICE := PRICE;
ELSIF ( PRICE >= 10
AND PRICE <= 100)
THEN
CON_PRICE := (PRICE * 10) * 100;
ELSE
CON_PRICE := (PRICE * 20) * 100;
END IF;
END;
/
【讨论】:
其实elseif
应该是elsif
:docs.oracle.com/database/121/LNPLS/…
@a_horse_with_no_name 你说得对,我误解了上下文并认为 OP 想要使用新的 IF 语句。刚刚编辑,谢谢以上是关于ORA-00922: 创建 PL/SQL 过程时选项丢失或无效的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL Plus:创建用户时出现错误“ORA-00922:缺少或无效选项”
oracle创建实例时出现ORA- 00922缺失或无效,忽略后出现ORA-28000账号已被锁定。