ORA-06550: line n, column n は、Oracle PL/SQLの匿名ブロック、プロシージャ、ファンクション、パッケージ、トリガーなどでコンパイルエラーが起きた時に表示される入口メッセージです。多くの場合、ORA-06550そのものを直すのではなく、直後に続く PLS- エラーや PL/SQL: Statement ignored の行を読みます。
Oracle公式のORA-06550説明でも、通常はPL/SQLコンパイルエラーであり、先頭に出るline/columnと後続メッセージを確認して修正する流れです。そのため、ORA-06550は「本当の原因を探す入口」と考えると迷いにくくなります。
ORA-06550が出たら、まず次の行以降の
PLS-00103、PLS-00306、PLS-00201 などを確認します。構文エラーなら PLS-00103、引数不一致なら PLS-00306、識別子が見えないなら PLS-00201 が中心です。最初に見るべきエラー文
ORA-06550は、単独で原因を特定するエラーというより、後続のPL/SQLエラーへ案内するメッセージです。同じORA-06550でも、次の行に出ている文によって確認する場所が変わります。
| 後続メッセージ | よくある意味 | 最初に見る場所 |
|---|---|---|
PLS-00103 |
構文として読めない | セミコロン、THEN、END IF、直前行 |
PLS-00306 |
呼び出し引数が合わない | ALL_ARGUMENTS、プロシージャ定義、OUT引数 |
PLS-00201 |
識別子が見えない | 宣言、スキーマ名、直接権限、シノニム |
PL/SQL: Statement ignored |
直前のエラーにより文が無視された | この行ではなく直前のPLSエラー |
PL/SQL: Compilation unit analysis terminated |
コンパイル単位の解析が止まった | 最初に出たPLSエラー、パッケージ仕様部と本体 |
ORA-06550とは
ORA-06550は、PL/SQLのコンパイルまたは解析中にエラーがあったことを示します。単体で原因を説明するというより、後続のエラーをまとめる親メッセージのように表示されます。
ORA-06550: line 4, column 3: PLS-00103: Encountered the symbol "END" when expecting one of the following: ; ORA-06550: line 4, column 3: PL/SQL: Statement ignored ORA-06550: line 1, column 7: PL/SQL: Compilation unit analysis terminated
| 表示 | 意味 | 対応 |
|---|---|---|
ORA-06550 |
PL/SQL側でコンパイル/解析エラーが起きた | 後続のPLSエラーを読む |
line n, column n |
Oracleが異常に気づいた位置 | その行と直前の構文を見る |
PLS-00103 |
構文エラー | セミコロン、BEGIN/END、IF/LOOPを確認 |
PL/SQL: Statement ignored |
該当文が無視された | 直前のPLSエラーを直す |
まず読むべき順番
ORA-06550では、表示された行を上から順番に読むより、原因行を探す順番を決めると早いです。特に後続の PLS- エラーが複数出ている場合、最初のPLSエラーから直すのが基本です。
| 順番 | 見る場所 | 理由 |
|---|---|---|
| 1 | 最初の PLS- エラー |
根本原因であることが多い |
| 2 | line / column |
修正箇所の起点になる |
| 3 | エラー行の直前 | セミコロンや閉じ忘れは前の行が原因になりやすい |
| 4 | PL/SQL: Statement ignored |
結果として無視された文を確認する |
| 5 | USER_ERRORS |
DBオブジェクト作成時の残存エラーを確認する |
line / columnの読み方
line と column は、Oracleがエラーに気づいた位置です。必ずしも原因そのものの位置とは限りません。PLS-00103のような構文エラーでは、直前の文末や閉じ忘れが原因でも、次の行でORA-06550が表示されます。
BEGIN
DBMS_OUTPUT.PUT_LINE('start')
DBMS_OUTPUT.PUT_LINE('end');
END;
/
-- ORA-06550: line 3, column 3:
-- PLS-00103: Encountered the symbol "DBMS_OUTPUT" ...
-- 原因はline 2のセミコロン忘れ
構文エラーの読み方は PLS-00103の原因と解決方法 で詳しく整理しています。
PLS-00103が続く場合
PLS-00103 は、PL/SQLが予期しない記号やキーワードに遭遇した時のエラーです。セミコロン忘れ、THEN 忘れ、END IF や END LOOP の不足、SQLとPL/SQL構文の混同を確認します。
BEGIN
IF SYSDATE > DATE '2026-01-01'
DBMS_OUTPUT.PUT_LINE('after 2026');
END IF;
END;
/
-- ORA-06550
-- PLS-00103: Encountered the symbol "DBMS_OUTPUT" ...
この場合は IF 条件 THEN のように、PL/SQL構文として不足しているキーワードを補います。
PLS-00306が続く場合
PLS-00306 が続く場合は、呼び出しているプロシージャやファンクションの引数の数、型、順番、OUT / IN OUT の扱いが合っていません。
BEGIN p_sync_order(1001); END; / -- ORA-06550: line 2, column 3: -- PLS-00306: wrong number or types of arguments in call to 'P_SYNC_ORDER' -- ORA-06550: line 2, column 3: -- PL/SQL: Statement ignored
この場合は、ALL_ARGUMENTS で宣言側の引数を確認します。詳しくは PLS-00306の原因と解決方法 を確認してください。
PL/SQL: Compilation unit analysis terminated が出る場合
PL/SQL: Compilation unit analysis terminated は、プロシージャ、ファンクション、パッケージなどのコンパイル単位を解析できずに終了したことを示します。この文自体を直すのではなく、同時に出ている最初の PLS- エラーを確認します。
CREATE OR REPLACE PROCEDURE p_test IS BEGIN missing_proc; END; / -- ORA-06550: line 3, column 3: -- PLS-00201: identifier 'MISSING_PROC' must be declared -- ORA-06550: line 1, column 7: -- PL/SQL: Compilation unit analysis terminated
この例では、解析終了メッセージよりも PLS-00201 が原因です。プロシージャ名が間違っていないか、権限がロール経由だけになっていないか、別スキーマなら schema.object で参照しているかを確認します。
PLS-00201が続く場合
PLS-00201 が続く場合は、変数、プロシージャ、パッケージ、テーブル、型などの識別子が見えていません。宣言漏れ、スコープ外参照、別スキーマ参照、権限不足、シノニム不足を確認します。
BEGIN app_pkg.run_job; END; / -- ORA-06550: line 2, column 3: -- PLS-00201: identifier 'APP_PKG.RUN_JOB' must be declared -- ORA-06550: line 2, column 3: -- PL/SQL: Statement ignored
名前解決の問題は PLS-00201の原因と解決方法 を見ると切り分けやすいです。
PLS-00302・PLS-00323が続く場合
パッケージやレコード、カーソルまわりでは PLS-00302 や PLS-00323 がORA-06550と一緒に出ることがあります。どちらもパッケージ設計や公開範囲と関係しますが、見る場所が違います。
| 後続エラー | 意味 | 見る場所 |
|---|---|---|
PLS-00302 |
入れ物の中に対象コンポーネントがない | パッケージ仕様部、レコード項目、カーソル列 |
PLS-00323 |
仕様部に宣言したものが本体で定義されていない | PACKAGE仕様部とPACKAGE BODY |
PLS-00905 |
参照しているオブジェクトが無効 | USER_ERRORS |
ORA-04063 |
パッケージ本体やビューにエラーがある | 依存オブジェクト、コンパイルエラー |
コンポーネントが見えない場合は PLS-00302、仕様部と本体の不一致は PLS-00323、無効オブジェクトは PLS-00905 や ORA-04063 を確認します。
SHOW ERRORSで確認する
SQL*PlusやSQLclでプロシージャ、ファンクション、パッケージ、トリガーを作成した時は、SHOW ERRORS で直近のコンパイルエラーを確認できます。
CREATE OR REPLACE PROCEDURE p_test IS
BEGIN
DBMS_OUTPUT.PUT_LINE('test')
END;
/
SHOW ERRORS PROCEDURE p_test;
エラー確認の流れは PL/SQLのコンパイル時エラーと警告 でも詳しく整理しています。
USER_ERRORS / ALL_ERRORSで確認する
DBオブジェクトとして作成したプロシージャやパッケージのエラーは、USER_ERRORS や ALL_ERRORS で確認できます。Oracle公式の USER_ERRORS 説明では、現在ユーザーが所有するストアドオブジェクトのエラー情報を確認できます。
SELECT name,
type,
line,
position,
text
FROM user_errors
WHERE name = 'P_TEST'
ORDER BY sequence;
SELECT owner,
name,
type,
line,
position,
text
FROM all_errors
WHERE owner = 'APP_SCHEMA'
AND name = 'PKG_ORDER'
ORDER BY sequence;
匿名ブロックで出る場合
BEGIN ... END; の匿名ブロックを実行してORA-06550が出る場合は、その場で実行したPL/SQLブロック内の構文や呼び出しが原因です。DBオブジェクトとして残らないため、USER_ERRORS には残らないことがあります。
| 見る場所 | 確認内容 |
|---|---|
| エラーのline/column | 匿名ブロック内の位置として読む |
| 直前の文 | セミコロン、閉じ忘れ、構文ミス |
| 呼び出し先 | プロシージャ名、引数、権限 |
| 実行方法 | SQL Developer、SQL*Plus、アプリからの渡し方 |
プロシージャ・パッケージで出る場合
プロシージャやパッケージ作成時にORA-06550が出る場合は、オブジェクトのコンパイルに失敗しています。作成自体はされたがINVALIDになっていることもあるため、USER_OBJECTS と USER_ERRORS を確認します。
SELECT object_name,
object_type,
status,
last_ddl_time
FROM user_objects
WHERE object_name IN ('P_TEST', 'PKG_ORDER')
ORDER BY object_name, object_type;
INVALIDのまま実行すると、ORA-06508 のような実行時エラーにつながることがあります。
アプリケーションから実行した時だけ出る場合
Java、C#、PHP、Pythonなどのアプリケーションから実行した時だけORA-06550が出る場合は、SQL文字列の組み立て、バインド変数、匿名ブロックの書き方、改行やセミコロンの扱いを確認します。
| 原因 | 症状 | 対処 |
|---|---|---|
| 匿名ブロックの終端が不足 | end-of-file やPLS-00103 |
BEGIN ... END; を完全に渡す |
| バインド変数不足 | not all variables bound 系 |
SQL内のプレースホルダとバインド数を合わせる |
| 引数型が違う | PLS-00306 |
DB側の引数定義とドライバ側の型を合わせる |
| 権限・スキーマ違い | PLS-00201 |
完全修飾名、直接権限、接続ユーザーを確認 |
| SQL文字列が途中で切れている | PLS-00103 |
ログに実際のSQL全文を出して確認 |
よくある原因と対処一覧
| 後続メッセージ | 主な原因 | 対処 |
|---|---|---|
PLS-00103 |
構文エラー | セミコロン、BEGIN/END、IF/LOOPを直す |
PLS-00306 |
引数の数・型が違う | ALL_ARGUMENTS で引数定義を確認 |
PLS-00201 |
識別子が見えない | 宣言、スコープ、権限、シノニムを確認 |
PLS-00302 |
コンポーネントが見えない | パッケージ仕様部やレコード項目を確認 |
PLS-00323 |
仕様部と本体が不一致 | PACKAGE仕様部とBODYの見出しを合わせる |
PLS-00905 |
オブジェクトが無効 | USER_ERRORS でINVALID原因を直す |
PL/SQL: Statement ignored |
前のPLSエラーの結果 | 直前のPLSエラーを優先して直す |
修正チェックリスト
| 項目 | OKの状態 |
|---|---|
| 最初のPLSエラーを読んだ | ORA-06550だけで判断していない |
| line/columnを確認した | 該当行と直前行を見た |
| 構文を確認した | セミコロン、BEGIN/END、IF/LOOPが合っている |
| 識別子を確認した | 名前、スキーマ、権限、シノニムが合っている |
| 引数を確認した | 数、型、OUT/IN OUTが合っている |
| USER_ERRORSを確認した | DBオブジェクトのエラーを把握している |
| 実行環境を確認した | SQL Developer、SQL*Plus、アプリで渡しているSQLが同じ |
よくある質問
ORA-06550だけを見れば原因が分かりますか?
分からないことが多いです。ORA-06550は入口なので、直後のPLSエラーやPL/SQLメッセージを確認します。
lineとcolumnは必ず原因の位置ですか?
必ずしも原因そのものではありません。構文エラーでは、原因が直前行にあり、次の行で検出されることがあります。
USER_ERRORSに出ません
匿名ブロックの実行エラーはDBオブジェクトとして残らないため、USER_ERRORSに出ないことがあります。作成済みプロシージャやパッケージならUSER_ERRORSを確認します。
アプリからだけORA-06550になります
実際にアプリが送っているSQL全文、バインド変数、接続ユーザー、スキーマ、改行やセミコロンの扱いを確認してください。
PL/SQL: Statement ignored は何を直せばよいですか?
その行自体より、直前に出ているPLSエラーを直します。PL/SQL: Statement ignored は結果として文が無視されたことを示します。
まとめ
ORA-06550は、Oracle PL/SQLのコンパイルエラーや解析エラーで表示される入口メッセージです。本当の原因は、後続の PLS-00103、PLS-00306、PLS-00201、PLS-00302、PLS-00323 などに出ていることが多いです。
対応は、最初のPLSエラーを読み、line/columnと直前行を確認し、必要に応じて SHOW ERRORS、USER_ERRORS、ALL_ERRORS でDBオブジェクトのコンパイルエラーを確認する流れです。ORA-06550だけで止まらず、後続メッセージを読むのが最短です。
参考
ORA-06550 – Oracle Database Error Help
USER_ERRORS – Oracle Database Reference
PL/SQL Language Elements – Oracle Database PL/SQL Language Reference

