Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]

Posted

技术标签:

【中文标题】Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]【英文标题】:Oracle Stored Procedure Issue - IN and OUT variables are invalid identifier [closed] 【发布时间】:2014-09-28 09:25:57 【问题描述】:

我正在尝试在 Oracle 中创建存储过程,当我运行命令 SQL> start g:\oracle\totalsales.sql 它显示如下错误

ERROR at line 6:
ORA-06550: line 6, column 47:
PL/SQL: ORA-00904: "CID": invalid identifier
ORA-06550: line 6, column 4:
PL/SQL: SQL Statement ignored
ORA-06550: line 20, column 3:
PLS-00201: identifier 'TOT' must be declared
ORA-06550: line 20, column 3:
PL/SQL: Statement ignored

这是我的存储过程代码。请看一下并建议我缺少的点。

CREATE OF REPLACE PROCEDURE TotalSales (CID IN NUMBER, TOT OUT NUMBER)
IS
    DECLARE
        P Sales.Price%TYPE;
        T NUMBER(10,2) := 0;

        CURSOR CUR_SALES IS
            SELECT Price FROM Sales WHERE EmployeeID = CID;

    BEGIN
        OPEN CUR_SALES;
        LOOP
            FETCH CUR_SALES INTO P;
            IF CUR_SALES%ROWCOUNT = 0 THEN
                RAISE_APPLICATION_ERROR(-20020, 'No data found.');
            END IF;
            EXIT WHEN CUR_SALES%NOTFOUND;
            T := T + P;
        END LOOP;
        CLOSE CUR_SALES;

        TOT := T;

    EXCEPTION
        WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);

END TotalSales;
/

【问题讨论】:

【参考方案1】:

改变

CREATE OF REPLACE

CREATE OR REPLACE

:)

并删除 DECLARE。 IS 隐含地标记了 DECLARE 块的开始。如果你想保留它,你需要用一个额外的 END 来关闭它 - 而且它还需要跟随开始。

【讨论】:

Jens Krogsboell - 早上浪费了我所有的时间来查看代码,并且每次都将 OF 读为 OR ......太愚蠢了。非常感谢你我的朋友。让我试试这个。 Jens Krogsboell - 是的 DECLARE 实际上不应该存在 OF 迫使我尝试修复可变错误的所有可能性:) 我知道 - 我们倾向于看到我们所期望的:)

以上是关于Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程参数介绍 in ,out , in out 以及 执行

oracle存储过程,IN OUT 类型的参数怎么传参数

Oracle存储过程的语法分析

Oracle————存储过程与函数

Oracle————存储过程与函数

php调用oracle带有out参数的存储过程