ошибка: FRM47337 Tree node label can not be null при выполнении скрипта DECLARE |
PL/SQL в Oracle Forms. Управляющие структуры. Глобальные переменные и параметры
Глобальные переменные и параметры
Глобальные переменные
Global Variable (глобальная переменная) - эта переменная среды Oracle Forms, значение которой доступно всему приложению. Глобальная переменная имеет символьный тип и может хранить до 255 символов. Переменная этого типа не объявляется, а инициализируется. Вы можете инициализировать глобальную переменную в любом месте программы, просто присвоив ей значение. Вы не можете инициализировать глобальную переменную в секции объявления переменных - DECLARE. Ниже приведен пример инициализации такой переменной.
Синтаксис:
:global.variable_name,
где :global - обязательное ключевое слово для инициализации и обращения к переменной; variable_name - название переменной global.
DECLARE My_age number:=20; My_name varchar2(10); BEGIN :global.s_name:='Сергеенко' DEFAULT_VALUE('Сергей', 'global.my_name'); … END;
В этом примере помимо обычного присвоения мы использовали процедуру DEFAULT_VALUE, которая инициализирует глобальную переменную global.my_name значением - "Сергей".
Глобальная переменная удаляется процедурой ERASE:
ERASE('global.my_name');
После удаления переменной также освобождается память.
В последних версиях Forms глобальные переменные поддерживаются, но не рекомендуются, так как они прежде всего расходуют существенное количество ресурсов. В качестве альтернативы глобальным переменным можно использовать небазовые элементы, размещенные на NULL -канве. Такие переменные, в отличие от глобальных, могут хранить различные типы данных ( DATE, NUMBER ) и позволяют контролировать размер с помощью свойства Maximum Length. Недостатком их использования является тот факт, что такая переменная доступна только в пределах одного модуля.
Параметры
Параметры - это особый вид переменных Oracle Forms, использующийся для передачи значений между модулями и другими средствами разработки, например, Reports и Graphics. Параметры - это одна из самых лучших альтернатив глобальным переменным, так как они имеют относительно большую гибкость:
- Хранение и передача специфичных данных. Параметры могут хранить различные типы данных.
- Параметр не нужно объявлять или инициализировать, так как он создается как объект навигатора.
- Значение параметра может быть доступно другим модулям и компонентам пакета Developer ( Reports, Graphics ).
Параметры могут быть использованы для передачи данных в другие модули с помощью процедур:
- CALL_FORM ;
- OPEN_FORM ;
- NEW_FORM ;
- RUN_PRODUCT.
Параметры могут применяться для передачи данных в Reports с помощью процедур:
- RUN_PRODUCT - используется в версиях Oracle Forms 6i и ниже. Неприменимо к Oracle Forms 9i и выше.
- RUN_REPORT_OBJECT - используется в версиях Oracle Forms 9i и выше. Неприменимо к Oracle Forms 6i и ниже.
Далее мы рассмотрим примеры создания, обращения и передачи параметров.
Создание параметра
- В навигаторе объектов выберите узел "Параметры". Создайте параметр двойным щелчком мыши по узлу "Параметры" или выберите пункт меню Навигатор | Создать.
- Созданный параметр появится в одноименном узле. При создании параметру присваивается имя ПАРАМЕТР+ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР, например, ПАРАМЕТР1. Запустите палитру свойств параметра (рис. 2.1).
- Определите внутренне имя параметра в свойстве "Имя". Определяя имя параметра, не забывайте, что оно будет использовано для обращения к нему в программе.
- Выберите тип данных для параметра - CHAR, DATE или NUMBER - в свойстве "Тип данных параметра". Если вы указываете тип CHAR, то необходимо также указать максимальную длину значения данных.
- В свойстве "Начальное значение параметра" определите начальное значение параметра.
Ранее мы уже рассматривали примеры обращения к параметрам в операторах PL/SQL, но повторим еще раз.
Обращение к параметрам в программах PL/SQL
Для обращения к параметру используется обязательное ключевое слово : PARAMETER . Ниже приведен синтаксис определения параметра:
:PARAMETER.parameter_name
где PARAMETER - зарезервированное слово, использующее для обращения; Parameter_name - уникальное имя параметра в объектном навигаторе.
DECLARE Ma_name varchar2(20):=:parameter.my_name; BEGIN :parameter.s_name:='Сергеенко'; :about.age:=:parameter.my_age; END;
К параметрам, так же как и к элементам, допустимо косвенное обращение с помощью функции NAME_IN и COPY, как показано ниже:
My_name:=Name_in('PARAMETER.my_name') Copy('Сергей', 'PARAMETER.my_name')
При обращении к параметрам, как и в случае с глобальными переменными, опускается двоеточие перед ключевым словом, а сам параметр заключается в двойные кавычки.
Вы также можете обращаться к параметрам:
- В свойствах блока ORDER BY и WHERE CLAUSE.
Например:
ORDER BY - :parameter.age asc WHERE CLAUSE - my_name=:parameter.my_name
- При создании LOV, указывая условие WHERE при формировании группы записей и в свойстве RETURN ITEM LOV (свойство Column Mapping). Например:
select * from names where name=:parameter.my_name
Передача параметров. Создание списков параметров
Как уже было написано выше, параметры могут передаваться между модулями и приложениями с помощью списков параметров - Parameter List. Список параметров - это структура, которая подобно элементу списка хранит список имен параметров. В списке параметров вы можете определить два типа данных:
- Текстовый параметр - хранит и передает символьный набор данных.
- Параметр данных - хранит и передает в качестве ключа имя группы записей (Record Group).
Процедуры и функции для работы со списком параметров и параметрами приведены в табл. 2.1.
Рассмотрим пример, в котором затронуты практически все вышеперечисленные функции и процедуры.
DECLARE pl_id ParamList; pl_name VARCHAR2(255) := 'PL_REP'; BEGIN pl_id := Get_Parameter_List(pl_name); IF NOT ID_Null (pl_id) THEN Destroy_Parameter_List(pl_id); END IF; pl_id := Create_Parameter_List (pl_name); Run_Product(REPORTS, 'c:\ zak\zak' ,ASYNCHRONOUS, RUNTIME, FILESYSTEM, pl_id, null); END;