Wanneer u compilatiefouten krijgt, wilt u zien welke fouten u hebt ontvangen. In SQL*Plus kunt u dat doen met het commando 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
De fouten vertellen u dat de compiler denkt dat het sleutelwoord op regel 11, kolom 29 een kolomnaam is en dat kolomnamen op dat punt in uw code niet zijn toegestaan. Regel 11 kolom 29 is de pl_loc
identificatie. Vermoedelijk was het niet je bedoeling dat dit een verwijzing naar een kolomnaam was. Vermoedelijk bedoelde u dat als de naam van een parameter. Maar Oracle herkent die identifier niet als de parameter. Dit komt omdat uw parameter de naam p_loc
heeft niet pl_loc
(let op de extra l
).
Als je de naam van alle drie de parameters corrigeert, compileert de code
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.