English 中文(简体)
使用SQL Developer创建包的问题
原标题:
  • 时间:2009-01-08 22:52:08
  •  标签:

所以,我从未使用过存储过程,一般也没有太多数据库经验,现在我被分配了一个需要创建程序包的任务,但我遇到了困难。

使用SQL Developer,我正试图创建一个名为JUMPTO的包,其中包含以下代码...


create or replace package JUMPTO is
  type t_locations is ref cursor;

  procedure procGetLocations(locations out t_locations);

end JUMPTO;

当我运行它时,它会输出这个PL / SQL代码块...


DECLARE
  LOCATIONS APPLICATION.JUMPTO.t_locations;
BEGIN

  JUMPTO.PROCGET_LOCATIONS(
    LOCATIONS => LOCATIONS
  );
  -- Modify the code to output the variable
  -- DBMS_OUTPUT.PUT_LINE( LOCATIONS =   || LOCATIONS);
END;

我找到的教程说需要删除那个第二行的注释。我尝试过带有和不带有注释的方式。

当我点击“确定”时,出现错误...


ORA-06550: line 2, column 32:
PLS-00302: component  JUMPTO  must be declared
ORA-06550: line 2, column 13:
PL/SQL: item ignored
ORA-06550: line 6, column 18:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 5, column 3:
PL/SQL: Statement ignored
ORA-06512: at line 58

我真的不知道正在发生什么,这对我来说完全是新领域。我试着创建一个仅从数据库中选择一些内容的主体,但一切都没有按照我头脑中的方式工作。有人能给我任何有关此的见解吗?

最佳回答

首先,您需要声明一个软件包主体,例如:

create or replace package body JUMPTO is

  procedure procGetLocations(locations out t_locations)
  is
  begin
    locations := null; -- Need code here
  end;

end JUMPTO;

要进行编译,需要这个:

 DECLARE
     LOCATIONS JUMPTO.t_locations;
   BEGIN
     JUMPTO.PROCGETLOCATIONS(
       LOCATIONS => LOCATIONS
     );
   END;
问题回答

一个Oracle PL/SQL 包含两个部分:

  • A package specification (the public part, where globally accessible constants, functions, procedures, variables, etc are listed).
  • A package body (where the code resides to implement the package spec).

你的第一段代码声明了包规范(JUMPTO)。你声明了一个类型(t_locations)和一个没有输入但输出类型为t_locations的一个变量(locations)的过程(procGetLocations)。

首先编译包规范(如您所做的那样),然后编译包体,像这样:

create or replace package body JUMPTO is  
procedure procGetLocations(locations out t_locations) is  
begin    
locations := null; -- Your code goes here
end procGetLocations;
end JUMPTO;

现在,您可以在其他PL/SQL块(匿名或其他)中调用 procGetLocations 过程。





相关问题