【问题标题】:How can I fix this package body creation error?如何修复此包体创建错误?
【发布时间】:2021-02-20 01:15:20
【问题描述】:

我正在制作一个包以在同一个地方收集一些功能。但是,当我尝试创建主体时,它总是出现错误。

我已经尝试了我所知道的一切,但无论我尝试多少次,它总是给我同样的错误

这是我的包裹,不会给我带来任何错误。

create or replace PACKAGE talde_paquete AS
procedure editaldeak(Equipo Taldeak.Kod_taldea%TYPE, Nombre Taldeak.izena%TYPE, Localidad Taldeak.Herria%TYPE, Correo taldeak.helbide_elektronikoa%TYPE,Campo Taldeak.Zelaia%TYPE);
procedure equipopartidos(Equipo partidak.talde1%TYPE);
END talde_paquete;

这是我的包裹体,它总是给我带来同样的错误

CREATE OR REPLACE PACKAGE BODY talde_paquete 
IS
procedure editaldea(Equipo Taldeak.Kod_taldea%TYPE, Nombre Taldeak.izena%TYPE, Localidad Taldeak.Herria%TYPE, Correo taldeak.helbide_elektronikoa%TYPE,Campo Taldeak.Zelaia%TYPE)
AS
VTaldea NUMBER(1);
Taldenoexist EXCEPTION;
BEGIN
    SELECT COUNT(Kod_Taldea) INTO VTaldea FROM Taldeak WHERE Kod_Taldea=Equipo;
    IF VTaldea=1 THEN
        UPDATE Taldeak SET Izena=Nombre, Herria=Localidad, Helbide_Elektronikoa=Correo, Zelaia=Campo WHERE Kod_taldea=Equipo;
    ELSE
        RAISE Taldenoexist;
    END IF;
EXCEPTION
    WHEN Taldenoexist THEN
       DBMS_OUTPUT.PUT_LINE('Taldea ez da existitzen');
END editaldea;
procedure equipopartidos(Equipo partidak.talde1%TYPE)
IS
    CURSOR PartidoEquipo IS
        SELECT Talde1, Talde2, P_Data FROM Partidak WHERE Talde1 LIKE Equipo OR Talde2 LIKE Equipo;
    E1 Partidak.Talde1%TYPE;
    E2 Partidak.Talde2%TYPE;
    Fecha Partidak.P_Data%TYPE;
    existe NUMBER(3);
    Taldexist EXCEPTION;
BEGIN
    SELECT COUNT(Talde1) INTO existe FROM partidak WHERE Talde1=Equipo OR Talde2=Equipo;
    IF (existe>0)THEN
    OPEN PartidoEquipo;
    FETCH PartidoEquipo INTO E1,E2,Fecha;
    WHILE PartidoEquipo%FOUND LOOP
        DBMS_OUTPUT.PUT_LINE(E1||' taldeak '||E2||' taldearen aurka jokatuko du '||Fecha);
        FETCH PartidoEquipo INTO E1,E2,Fecha;
    END LOOP;
        CLOSE PartidoEquipo;
    ELSE
    RAISE Taldexist;
    END IF;
EXCEPTION
    WHEN Taldexist THEN
        DBMS_OUTPUT.PUT_LINE('Taldea ez da existitzen');
END equipopartidos;
END talde_paquete;
/

这是我在尝试运行正文脚本时遇到的错误。

LINE/COL  ERROR
--------- -------------------------------------------------------------
0/0       PL/SQL: Compilation unit analysis terminated
1/14      PLS-00905: object BIZKAIABASKET.TALDE_PAQUETE is invalid
1/14      PLS-00304: cannot compile body of 'TALDE_PAQUETE' without its specification
Errors: check compiler log

【问题讨论】:

  • 它很简单,只需阅读错误消息并解决问题。您的包装规格无效,请找出原因
  • 也许你缺少 / 作为你的包规范的最后一行。否则,代码将不会被执行,并且规范将丢失。你的包体最后确实有 /。
  • 该错误意味着规范存在但无效 - 所以“这是我的包,不会给我带来任何错误。”不可能是真的。再次运行规范编译,看看它说了什么;和/或查询 user_errors 以查看显示的内容。 (可能其中一个表或列名是错误的,但我们看不到您的架构,因此您必须进行调查...)

标签: oracle plsql package


【解决方案1】:

@hotfix 完全正确,编译时的错误信息很清楚。正文中的程序定义必须与标题中定义的相同,我注意到名称editaldeakeditaldea有区别

【讨论】:

  • 这是真的,而且很明显;但身体编译并没有那么远。如果规范是有效的,唯一的问题是身体定义的差异,身体会得到 PLS-00323 和 PLS-00328。 OP 实际上得到的错误意味着规范本身是无效的——所以它甚至没有尝试编译正文。 (我想真正的问题是规范中的表或列名中有类似的拼写错误,但我们没有得到错误。)
  • 没错,是排版的问题,只要把程序名改正就行了,就看我们的小伙伴@benat-garrido-de-ordorika
猜你喜欢
  • 2023-01-19
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2018-02-09
  • 2020-02-22
  • 2014-03-01
相关资源
最近更新 更多