När du får kompileringsfel vill du se vilka fel du fick. I SQL*Plus kan du göra det med kommandot 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
Felen talar om för dig att kompilatorn tror att nyckelordet på rad 11, kolumn 29 är ett kolumnnamn och att kolumnnamn inte är tillåtna vid den punkten i din kod. Rad 11 kolumn 29 är pl_loc
identifierare. Förmodligen hade du inte tänkt att det skulle vara en referens till ett kolumnnamn. Du tänkte antagligen att det skulle vara namnet på en parameter. Men Oracle känner inte igen den identifieraren som parametern. Detta beror på att din parameter heter p_loc
inte pl_loc
(notera den extra l
).
Om du korrigerar namnet på alla tre parametrarna kompileras koden
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.