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
A
答えて
0
OK、私はあなたのプロシージャを見て、あなたが持っている問題を解決しようとしました。
あなたは達成しようとしていることについて多く(または実際には何も)説明していないため、答えを得ることが本当に難しいです。 ここにいる人は本当に助けたいと思っていますが、少なくとも助けを提供するためには魔法使いのツールを私たちに与えなければなりません。
とにかく、仮定のホストと、ここにあなたの手順の私のバージョンは以下の仮定である:
- あなたの手順では、POSは(あなたはそれがプロシージャ定義にPOSの名前が、その後、それを実行しようとする名前ですPOAとして)。
- 主な問題は、ループ内の入力パラメータ「a」に新しい値を割り当てることでした。それは入力パラメータなので不変で、新しい値を代入することはできません。私はローカル変数 "v_iter"を宣言し、 "a"の値を代入し、それを使ってループを制御することで、これを丸めました。
- 予期しないエラーを処理し、そのエラーをDBMS_OUTPUT経由で出力するために、「例外」セクションを追加しました。これをより堅牢にしたいと思うかもしれません。
- 入力パラメータ "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;
/
はそれがお役に立てば幸いです。
あなたのご質問はありますか? –
そこにあなたのコードにいくつかのエラーがあります。これは無料のサイトのデバッグではなく、ここに投稿する前に変数を宣言して手続きを書く方法を調べます。 – Ollie
OPエラー:authorステートメントが無視されました。 – Beege