Входной параметр пакета SQL Developer

Я пытаюсь создать пакет в Oracle SQL Developer и хочу иметь общедоступный входной параметр, в который другой пользователь может ввести дату. Я попробовал следующий код -

Create PACKAGE Assignment_1_Pack is
 vstartDate date := to_date('&startDate', 'DD/MM/YYYY');
 vendDate date := to_date('endDAte', 'DD/MM/YYYY');

END;

Когда я пытаюсь запустить его, я получаю следующее сообщение

Empty package Assignment_1_pack definition (no public members).

Я ожидал, что всплывающее окно предложит ввести данные, но раньше я не использовал пакеты, поэтому я не уверен, что я делаю неправильно.


person Grabdegood    schedule 19.03.2016    source источник
comment
Такой сохраненный PL/SQL не является интерактивным и не имеет подстановочных переменных. Даже если у вас есть запрос SQL Developer, он будет запрашивать только во время компиляции, затем он скомпилирует и сохранит код с заменой &startDate и &endDate любыми литеральными значениями, которые вы ввели. Он не будет запрашивать пользователей пакета.   -  person William Robertson    schedule 19.03.2016


Ответы (1)


  1. беги set define on;
  2. Используйте команду create OR REPLACE package Assignment_1_Pack ...

SET DEFINE ON/OFF включает или выключает подстановочные переменные. Вероятно, была отключена подстановка переменных, поэтому SQLDeveloper не запрашивает значение

Подробнее см. здесь: https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm#sthref2736

УСТАНОВИТЬ ОПРЕДЕЛЕНИЕ[INE] {& | с | НА | OFF} Устанавливает символ, используемый для префикса переменных подстановки, в c.

ON или OFF определяет, будет ли SQL*Plus сканировать команды на наличие переменных подстановки и заменять их их значениями. ON изменяет значение c обратно на значение по умолчанию '&', а не на последний использованный символ. Установка DEFINE на OFF имеет приоритет над установкой переменной SCAN.


create OR REPLACE package ... предотвращает ошибки в случае, если пакет уже создан. Простая команда CREATE PACKAGE xxx завершается ошибкой, если пакет уже существует. Если вы создаете пакет в первый раз, то все последующие попытки будут неудачными. Create OR REPLACE ... отбрасывает пакет, если он уже существует, а затем создает его снова, так что новый не работает.

person krokodilko    schedule 19.03.2016