Проблемы создания пакетов с использованием SQL Developer
Так что я никогда не работал с хранимыми процедурами, и у меня нет большого опыта работы с БД в целом, и мне было поручено задание, требующее создания пакета, и я застрял.
Используя 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 ответа
Прежде всего вам нужно объявить тело пакета, например:
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 состоит из 2 частей:
- Спецификация пакета (публичная часть, где перечислены глобально доступные константы, функции, процедуры, переменные и т. Д.).
- Тело пакета (где находится код для реализации спецификации пакета).
Ваш первый кусок кода объявил спецификацию пакета (JUMPTO). Вы объявили тип (t_locations) и процедуру (procGetLocations), которые не имеют входных данных, но выводят одну переменную (местоположения) типа 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 (анонимных или иных).