Проблемы создания пакетов с использованием SQL Developer - PullRequest
0 голосов
/ 09 января 2009

Так что я никогда не работал с хранимыми процедурами, и у меня не было большого опыта работы с БД в целом, и мне была назначена задача, требующая создания пакета, и я застрял.

Используя 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

Я действительно понятия не имею, что происходит, для меня это совершенно новая территория. Я попытался создать тело, которое просто выбрало какой-то материал из базы данных, но ничего не работает так, как кажется в моей голове. Кто-нибудь может дать мне какое-либо понимание этого?

Ответы [ 2 ]

2 голосов
/ 15 января 2009

Пакет Oracle PL / SQL состоит из 2 частей:

  • Спецификация пакета (открытая часть, где перечислены глобально доступные константы, функции, процедуры, переменные и т. Д.).
  • Тело пакета (где находится код для реализации спецификации пакета).

Ваш первый фрагмент кода объявил спецификацию пакета ( JUMPTO ). Вы объявили тип ( t_locations ) и процедуру ( procGetLocations ), которая не имеет входных данных, но выводит одну переменную ( location ) типа t_locations.

Сначала скомпилируйте спецификацию пакета (как вы это сделали), затем скомпилируйте тело пакета следующим образом:

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;

Теперь вы можете вызывать процедуру procGetLocations в других блоках PL / SQL (анонимных или иных).

2 голосов
/ 09 января 2009

Прежде всего вам необходимо объявить тело пакета, например:

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;
...