【发布时间】:2021-04-09 11:22:17
【问题描述】:
我是 pl sql 的新手,这是我为学校项目创建的第一个包。我正在使用 oracle apex,浏览器版本来编译这段代码,我得到了上面提到的错误,不幸的是我不知道如何调试它。我尝试自己运行每个过程和函数,看看它们是否有效,我总是得到“PLS-00103:遇到符号“文件结尾”。
CREATE OR REPLACE PACKAGE package_farmacie AS
procedure stergere_angajat(nr_angajat angajati_f.ID%type);
procedure stergere;
function salariu_mediu return number;
procedure afisare;
numar_angajati_stersi integer;
sal_mediu number;
end;
CREATE OR REPLACE PACKAGE BODY package_farmacie AS
procedure produse;
procedure salariu_angajat;
procedure salariu_angajat is
cursor c1 is select * from angajati_f where salariu <(select avg(salariu) from angajati_f) order by salariu;
cursor c2 is select * from angajati_f where salariu >(select avg(salariu) from anagajati_f) order by salariu;
begin
dbms_output.put_line(‘Angajati cu salariu mai mic decat media’);
for i in c1 loop
dbms_output.put_line(i.ID||’ ‘||i.prenume||i.salariu);
exit when c1%notfound;
end loop;
dbms_output.put_line(‘Angajati cu salariu peste medie’);
for i in c2 loop
dbms_output.put_line(i.ID||’ ‘||i.prenume||i.salariu);
end loop;
end;
procedure stergere is
numar_angajati_stersi angajati_f.ID%type;
begin
select count(ID)
into numar_angajati_stersi
from sefi_schimb;
delete from sefi_schimb;
dbms_output.put_line('Au fost stersi '|| numar_angajati_stersi ||' angajati!');
end;
function salariu_mediu return number is
sal_mediu angajati_f.salariu%type;
begin
select avg(salariu)
into sal_mediu
from angajati_f;
dbms_output.put_line('Salariul mediu este: '||sal_mediu);
return sal_mediu;
salariu_angajat();
end;
function afisare_angajati return nume is
cursor afisare is SELECT nume FROM angajati_f;
nume_angajat angajati_f.nume%type;
begin
open afisare;
loop
fetch afisare into nume_angajat;
if afisare%NOTFOUND then
exit;
end if;
Dbms_output.put_line(‘Angajati gasiti:’||nume_angajat);
end loop;
close afisare;
end;
procedure stergere_angajat(nr_angajat angajati_f.ID%type) is
id_angajat angajati_f.ID%type;
begin
select ID
into id_angajat
from angajati_f
where ID = nr_angajat;
delete from angajati_f
where ID = nr_angajat;
dbms_output.put_line('Stergere cu succes!');
dbms_output.put_line('A(u)fost sters( e) '|| SQL%ROWCOUNT ||' rand(uri)!');
exception
when no_data_found then
dbms_output.put_line('Id-ul angajatului nu exista!');
angajati := afisare_angajati();
dbms_output.put_line(angajati);
end;
procedure produse is
cursor c_produse (cod_produse_in IN varchar2)
is
select denumire
from produse_f
where cod = cod_produse_in;
prod_denumire produse_f.denumire%type;
begin
dbms_output.put_line('Lista produselor in functie de cod: '||cod_produse_in);
open c_produse(cod_produse_in);
loop
fetch c_produse
into prod_denumire;
if (c_produse%notfound = true) then
close c_produse;
return;
end if;
dbms_output.put_line(prod_denumire);
end loop;
end;
procedure afisare is
begin
produse();
end;
end;
我检查了表格和列名中的拼写错误,它们写得正确,是语法还是整个代码一团糟?
【问题讨论】:
-
我不熟悉使用 Apex 创建包。包和包主体语句之间是否需要一些分隔符?很多工具都可以。
-
我没有将它们一起执行,我只是把它们放在这里以防万一
-
你到底是在哪里运行这段代码的?
-
该错误消息通常意味着您向数据库提交了一些尚未正确结束的内容。在这里,您需要分别提交包规范和包体。我不使用 APEX SQL gui 来运行 SQL,但我想您想在单独的行中的每个块之后粘贴
/以提交它们。或者,您只想提交包规范代码,然后只需提交包主体代码。 -
这就是我提交它的方式,首先是规范代码,然后是正文。仅在执行正文时出现错误
标签: oracle plsql package oracle-apex