2016-03-22 14 views
-3
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; 
+3

あなたのご質問はありますか? –

+0

そこにあなたのコードにいくつかのエラーがあります。これは無料のサイトのデバッグではなく、ここに投稿する前に変数を宣言して手続きを書く方法を調べます。 – Ollie

+0

OPエラー:authorステートメントが無視されました。 – Beege

答えて

0

OK、私はあなたのプロシージャを見て、あなたが持っている問題を解決しようとしました。

あなたは達成しようとしていることについて多く(または実際には何も)説明していないため、答えを得ることが本当に難しいです。 ここにいる人は本当に助けたいと思っていますが、少なくとも助けを提供するためには魔法使いのツールを私たちに与えなければなりません。

とにかく、仮定のホストと、ここにあなたの手順の私のバージョンは以下の仮定である:

  1. あなたの手順では、POSは(あなたはそれがプロシージャ定義にPOSの名前が、その後、それを実行しようとする名前ですPOAとして)。
  2. 主な問題は、ループ内の入力パラメータ「a」に新しい値を割り当てることでした。それは入力パラメータなので不変で、新しい値を代入することはできません。私はローカル変数 "v_iter"を宣言し、 "a"の値を代入し、それを使ってループを制御することで、これを丸めました。
  3. 予期しないエラーを処理し、そのエラーをDBMS_OUTPUT経由で出力するために、「例外」セクションを追加しました。これをより堅牢にしたいと思うかもしれません。
  4. 入力パラメータ "a"がnullまたは有効な数値(つまり、負ではない)であるかどうかを確認するためにテストすることはありません。ここで

変更されたコードです:

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; 
/

はそれがお役に立てば幸いです。

+0

この回答に感謝します。これは本当に私にとって非常に便利です。 – VISHAKHA

+0

問題ありません。それが助けになったら、それを正しいものとしてマークして、評判とそれが働いていることを知る答えを見ている他の人を助けることができます。 – Ollie