1. ホーム
  2. oracle

[解決済み] PLS-00103:次のいずれかを期待しているときに、記号"; "に遭遇しました。

2022-02-10 07:18:17

質問

ピンリセット機能で使用するために、ユーザーのセキュリティ質問に対する答えを挿入しようとしています。

Ellucian banner v8+ はこれを実行するための API を提供していますが、私はその API について非常に不慣れで、以下のエラーメッセージを見る限り、これを正しく実行するには程遠い状態です。何か助けがあれば幸いです。

Oracle SQL Developerで実行してみました。

execute gb_pin_answer.p_create(
    P_PIDM        =>    12345,
    P_NUM         =>    1,
    p_gobqstn_id  =>    1,
    p_qstn_desc   =>    '',
    p_ansr_desc   =>    'David',
    p_ansr_salt   =>    'A123B456',
    p_user_id     =>    'W:H12345678',
    p_data_origin =>    'WWW_USER',
    p_rowid_out         OUT gb_common.internal_record_id_type
);

これは暗闇の中のショットですが、私はそれを試してみることを考えました、そのパッケージのp_create関数を実行しようとしたときに表示されるエラーメッセージ。

コマンドの15行目から始まるエラー: execute gb_pin_answer.p_create() エラーの報告です。ORA-06550: 1 行目、30 列目: PLS-00103: エ ンカウンターがあります。 シンボル ";".のいずれかを期待していたのに。

( ) - + case mod new not null table continue avg count 現在 存在する 最大 最小 事前 sql stddev 総和 分散 実行 マルチセット 先頭と末尾の両方 forall マージ 年 月 日 時 分秒 タイムゾーン_時間 タイムゾーン_分 タイムゾーン_地域 タイムゾーン_abbr 時間 タイムスタンプ間隔 日付 06550. 00000 - "行 %s、列 %s:\n%s" *原因 通常、PL/SQLのコンパイル・エラーです。 *対処法

コマンドの16行目から始まるエラーです。P_PIDM => 12345, Error のレポートを参照してください。不明なコマンド

コマンドの17行目から始まるエラーです。P_NUM => 1, Error report: 不明なコマンド

コマンドの18行目から始まるエラー: p_gobqstn_id => 1, Error report: 不明なコマンド

コマンドの19行目から始まるエラー: p_qstn_desc => '', Error という報告をしています。不明なコマンド

コマンドの20行目から始まるエラー: p_ansr_desc => 'David', Error のレポートを参照してください。不明なコマンド

コマンドの21行目から始まるエラー: p_ansr_salt => 'A123B456', エラー報告です。不明なコマンド

Error at line 22 in command: p_user_id => 'W:H12345678', エラー報告です。不明なコマンド

コマンドの23行目から始まるエラー: p_data_origin => 'WWW_USER'。 エラー報告です。不明なコマンド

コマンドの24行目から始まるエラー: p_rowid_out OUT gb_common.internal_record_id_type エラー報告です。不明なコマンド

コマンドの25行目から始まるエラー。) エラー報告です。不明なコマンド

ここで、このp_createという関数の使い方を読みました。 http://inb1.banner.ecu.edu:9090/api_erd_index_guide/api/general/gb_pin_answer.html#p_create

UPDATE: エラーになるコード。

SET SERVEROUTPUT ON
declare
  l_rowid_out gb_common.internal_record_id_type;
BEGIN
  gb_pin_answer.p_create(P_PIDM => 36706, P_NUM => 1, P_GOBQSTN_ID => 1, P_QSTN_DESC => '', P_ANSR_DESC => 'David', P_ANSR_SALT => 'HB123456', P_USER_ID => 'H00036657', P_DATA_ORIGIN => 'WWW_USER', P_ROWID_OUT => 1_rowid_out);
  dbms_output.put_line('rowid: ' || l_rowid_out);
END;

エラーメッセージを表示します。

<ブロッククオート

エラーの報告です。ORA-06550: 4 行目、199 列目: PLS-00363: 式 '1'. は代入対象として使用できません ORA-06550: 4 行目、3 列目。 PL/SQLです。ステートメントが無視されました 06550. 00000 - "行 %s、列 %s:\n%s" *原因 通常、PL/SQLのコンパイル・エラーです。 *対処法

解決方法は?

問題は execute . これは実際には短い匿名PL/SQLブロックの略記で、行をまたいで分割することはできません。(継続文字を使う場合は別ですが、それがうまくいったことがあるかどうか、すぐには思い出せません)。最初の行だけが翻訳され、事実上実行されようとしているのです。

begin execute gb_pin_answer.p_create(; end;
/

...そして、非常に合理的なことに、コマンドの最後が p_create(; . 残りの手続き呼び出しは、10個の別々のコマンドとして扱われ、その結果、他のエラーが発生します。

解決策としては、プロシージャコール全体を1行にまとめるか、読みづらくなりますが execute :

begin
    gb_pin_answer.p_create(
        ...
    );
end;
/

しかし、最後のパラメータは正しくありません。 OUT ... に置き換える必要があります。 => some_value 他のものと同じように。しかし、これはoutパラメータなので、値を入れるものが必要です。実行中のスクリプトの他の部分を見ないと、すでに対処されているかどうかはわかりませんが、このパターンでは、おそらく匿名ブロックに変数を追加するだけでよいでしょう。

set serveroutput on
declare
    l_rowid_out gb_common.internal_record_id_type;
begin
    gb_pin_answer.p_create(
        ...
        p_rowid_out => l_rowid_out
    );
    -- optional
    dbms_output.put_line('rowid: ' || l_rowid_out);
end;
/