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 过程时选项丢失或无效的主要内容,如果未能解决你的问题,请参考以下文章

创建表时出现“ORA-00922:缺少或无效选项”

Oracle SQL Plus:创建用户时出现错误“ORA-00922:缺少或无效选项”

oracle创建实例时出现ORA- 00922缺失或无效,忽略后出现ORA-28000账号已被锁定。

创建oracle数据库时,出现ORA-00922: 选项缺失或无效

Oracle Apex ORA-00922:缺少或无效选项

在 PL/SQL Developer 中转义 & 符号