Gdy otrzymasz błędy kompilacji, będziesz chciał zobaczyć, jakie błędy otrzymałeś. W SQL*Plus możesz to zrobić za pomocą polecenia 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
Błędy mówią ci, że kompilator uważa, że słowo kluczowe w wierszu 11, kolumnie 29 jest nazwą kolumny i że nazwy kolumn nie są dozwolone w tym punkcie kodu. Wiersz 11, kolumna 29 to pl_loc
identyfikator. Przypuszczalnie nie chciałeś, aby było to odniesienie do nazwy kolumny. Przypuszczalnie chciałeś, aby była to nazwa parametru. Ale Oracle nie rozpoznaje tego identyfikatora jako parametru. Dzieje się tak, ponieważ twój parametr ma nazwę p_loc
nie pl_loc
(zwróć uwagę na dodatkowy l
).
Jeśli poprawisz nazwy wszystkich trzech parametrów, kod się skompiluje
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.