PL/SQL 编译错误

Posted

技术标签:

【中文标题】PL/SQL 编译错误【英文标题】:PL/SQL compilations error 【发布时间】:2017-04-05 07:43:09 【问题描述】:
CREATE OR REPLACE PROCEDURE Orden (n1 IN number, n2 IN number, n3 IN number) AS

    menor number;
        mediano number;
        mayor number;
    BEGIN
        IF (n1<n2) THEN 
            IF (n1<n3) THEN 
                menor := n1;
                IF (n2<n3) THEN
                    mediano := n2;
                    mayor := n3;
                ELSE 
                    mediano := n3;
                    mayor := n2;
                END IF;
            ELSE 
                menor := n3;
                mediano :=n1;
                mayor := n2;
            END IF;
        ELSE 
            IF (n1 < n3) THEN 
                menor := n2;
                mediano := n1;
                mayor := n3;
            ELSE 
                mayor := n1;
                IF(n2< n3) THEN 
                    medio := n2;
                    menor := n3;
                ELSE 
                    medio := n3;
                    menor := n2;
                END IF;
        END IF;
        n1 := menor;
        n2 := medio;
        n3 := mayor;                
    END;
/

错误是下一个:

39/5 PLS-00103:遇到符号“;”当期待其中之一 这 下列的: 如果

【问题讨论】:

你已经缩进了你的代码,这很好;但这并不能帮助您发现丢失的END IF; 不要编辑问题以消除您遇到的问题 - 它会使现有答案无效。如果您有新问题,请提出新问题。但是 Aleksej 的回答已经抢占了您现在得到的 PLS-00363 - 请看第三个要点。 我找到了丢失的 [END IF] ,但现在给我一个错误。但是,我可以通过 menor 、 mediano 、 mayor 来解决将变量 n1、n2、n3 翻转过来的问题,反之亦然。 【参考方案1】:

三个问题:

您缺少END IF medio 从未被声明;也许你的意思是mediano? 如果你想为你的输入参数赋值,它们需要是IN OUT

提示:CASE 可能是实现相同逻辑的更易读的方式。

【讨论】:

非常感谢,但现在我有另一个问题。 “另一个问题”是什么意思?通过我建议的编辑,程序应该可以编译。有什么问题?

以上是关于PL/SQL 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 编译错误

PL/SQL 编译失败,没有错误消息

PL/SQL 包编译错误:PLS-00323

PL/SQL:使用编译错误创建的函数 [关闭]

错误:PL/SQL:编译单元分析已终止?

更新期间PL/SQL编译错误