コンパイル エラーが発生した場合、受け取ったエラーを確認する必要があります。 SQL*Plus では、コマンド show errors
を使用してこれを行うことができます。
SQL> create or replace package body fpf
2 as
3 procedure insert_rows
4 (p_deptno IN dept.deptno%TYPE,
5 p_dname IN dept.dname%TYPE,
6 p_loc IN dept.loc%TYPE)
7 as
8 BEGIN
9 INSERT INTO dept
10 (deptno,dname,loc)
11 values ( pl_deptno,pl_dname,pl_loc);
12 end insert_rows;
13 end fpf;
14 /
Warning: Package Body created with compilation errors.
SQL> sho err
Errors for PACKAGE BODY FPF:
LINE/COL ERROR
-------- -----------------------------------------------------------------
9/1 PL/SQL: SQL Statement ignored
11/29 PL/SQL: ORA-00984: column not allowed here
エラーは、11 行目の 29 列目のキーワードが列名であるとコンパイラが認識し、コードのその時点で列名が許可されていないことを示しています。行 11 列 29 は pl_loc
です 識別子。おそらく、それを列名への参照にするつもりはなかったでしょう。おそらく、それをパラメーターの名前にするつもりでした。しかし、Oracle はその識別子をパラメーターとして認識しません。これは、パラメータの名前が p_loc
であるためです pl_loc
ではありません (余分な l
に注意してください ).
3 つのパラメーターすべての名前を修正すると、コードはコンパイルされます
Wrote file afiedt.buf
1 create or replace package body fpf
2 as
3 procedure insert_rows
4 (p_deptno IN dept.deptno%TYPE,
5 p_dname IN dept.dname%TYPE,
6 p_loc IN dept.loc%TYPE)
7 as
8 BEGIN
9 INSERT INTO dept
10 (deptno,dname,loc)
11 values ( p_deptno,p_dname,p_loc);
12 end insert_rows;
13* end fpf;
SQL> /
Package body created.