Wenn Sie Kompilierungsfehler erhalten, sollten Sie sehen, welche Fehler Sie erhalten haben. In SQL*Plus können Sie das mit dem Befehl show errors
tun
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
Die Fehler sagen Ihnen, dass der Compiler denkt, dass das Schlüsselwort in Zeile 11, Spalte 29 ein Spaltenname ist und dass Spaltennamen an dieser Stelle in Ihrem Code nicht erlaubt sind. Zeile 11 Spalte 29 ist der pl_loc
Kennung. Vermutlich wollten Sie nicht, dass dies ein Verweis auf einen Spaltennamen ist. Vermutlich wollten Sie, dass dies der Name eines Parameters ist. Aber Oracle erkennt diesen Bezeichner nicht als Parameter. Das liegt daran, dass Ihr Parameter p_loc
heißt nicht pl_loc
(beachten Sie das zusätzliche l
).
Wenn Sie die Namen aller drei Parameter korrigieren, wird der Code kompiliert
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.