Когато получите грешки при компилиране, ще искате да видите какви грешки сте получили. В 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
).
Ако коригирате името и на трите параметъра, кодът се компилира
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.