第8行的错误:PL / SQL:语句被忽略

时间:2016-03-22 14:31:48

标签: oracle10g

 ERROR at line 8: PL/SQL: Statement ignored    
CREATE OR REPLACE PROCEDURE POS(A IN NUMBER,M IN NUMBER,TOTAL OUT NUMBER)
    AS
    BEGIN
    TOTAL:=0;
    WHILE A>0 LOOP
    M:=MOD(A,10);
    TOTAL:=TOTAL+M;
    A:=(A/10);//statement ignored error
    END LOOP;
    DBMS_OUTPUT.PUT_LINE(TOTAL);
    END;
    DECLARE
    X NUMBER;
    Y NUMBER:=5;
    Z NUMBER;
    BEGIN
    POA(X,Y,Z);
    END;

1 个答案:

答案 0 :(得分:0)

好的,我已经查看了您的程序,并尝试解决您遇到的问题。

你没有对你想要达到的目标做出太多(甚至是任何事情)的解释,这使你很难找到答案。 这里的人真的想要帮助,但你必须至少给我们带巫婆的工具来提供帮助。

无论如何,有许多假设,这是我的程序版本,具有以下假设:

  1. 您的程序是名称POS(您在程序定义中将其命名为POS,但然后尝试将其作为POA执行)。
  2. 您的主要问题是尝试为循环内的输入参数“a”分配新值。由于它是输入参数,因此它是不可变的,您无法为其分配新值。我通过声明一个局部变量“v_iter”并将其赋值为“a”然后用它来控制循环来解决这个问题。
  3. 我添加了一个“异常”部分来处理任何意外错误并通过DBMS_OUTPUT输出该错误。您可能希望使其更加强大。
  4. 您不进行测试以检查输入参数“a”是否为空或有效数字(即非负数),您可能需要这样做以使您的过程更加健壮。
  5. 以下是更改后的代码:

    CREATE OR REPLACE 
    PROCEDURE POS (
       a IN NUMBER, 
       m IN NUMBER, 
       total OUT NUMBER
    )
    AS
       — Declare variables
       v_iter NUMBER := a;
    BEGIN
       — Initialise total
       total := 0;
    
       — Loop through “v_iter”
       WHILE v_iter > 0 
       LOOP
          m := MOD(v_iter,10);
          total := total + m;
          v_iter := (v_iter/10);
       END LOOP;
    
       DBMS_OUTPUT.put_line(total);
    EXCEPTION
       WHEN others
       THEN
          — Output and raise an error;
          DBMS_OUTPUT.put_line(sqlerrm);
          RAISE;
    END POS;
    /
    

    要打电话:

    DECLARE
        X NUMBER;
        Y NUMBER:=5;
        Z NUMBER;
    BEGIN
        POS(X,Y,Z);
    END;
    /
    

    希望它有所帮助。