Опубликован: 25.09.2009 | Доступ: свободный | Студентов: 911 / 84 | Оценка: 3.72 / 2.78 | Длительность: 10:50:00
Лекция 2:

PL/SQL в Oracle Forms. Управляющие структуры. Глобальные переменные и параметры

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Аннотация: В этой лекции слушатель научится работать с циклами, условным и последовательным управлением, объявлять глобальные переменные и параметры.

Глобальные переменные и параметры

Глобальные переменные

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. Запустите палитру свойств параметра (рис. 2.1).
    Палитра свойств параметра

    Рис. 2.1. Палитра свойств параметра
  3. Определите внутренне имя параметра в свойстве "Имя". Определяя имя параметра, не забывайте, что оно будет использовано для обращения к нему в программе.
  4. Выберите тип данных для параметра - CHAR, DATE или NUMBER - в свойстве "Тип данных параметра". Если вы указываете тип CHAR, то необходимо также указать максимальную длину значения данных.
  5. В свойстве "Начальное значение параметра" определите начальное значение параметра.

Ранее мы уже рассматривали примеры обращения к параметрам в операторах 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')

При обращении к параметрам, как и в случае с глобальными переменными, опускается двоеточие перед ключевым словом, а сам параметр заключается в двойные кавычки.

Вы также можете обращаться к параметрам:

  1. В свойствах блока ORDER BY и WHERE CLAUSE.

    Например:

    ORDER BY - :parameter.age asc
    WHERE CLAUSE - my_name=:parameter.my_name
  2. При создании LOV, указывая условие WHERE при формировании группы записей и в свойстве RETURN ITEM LOV (свойство Column Mapping). Например:
    select * from names where name=:parameter.my_name

Передача параметров. Создание списков параметров

Как уже было написано выше, параметры могут передаваться между модулями и приложениями с помощью списков параметров - Parameter List. Список параметров - это структура, которая подобно элементу списка хранит список имен параметров. В списке параметров вы можете определить два типа данных:

  • Текстовый параметр - хранит и передает символьный набор данных.
  • Параметр данных - хранит и передает в качестве ключа имя группы записей (Record Group).

Процедуры и функции для работы со списком параметров и параметрами приведены в табл. 2.1.

Таблица 2.1. Процедуры и функции для работы со списком параметров и параметрами.
Метод Значение
ADD PARAMETER Добавление параметра в список
CREATE PARAMETER LIST Создание списка параметров
DELETE PARAMETER Удаление параметра
DESTROY PARAMETER LIST Удаления списка параметров
GET PARAMETER ATTR Получение значения параметра
GET PARAMETER LIST Получение значения списка параметров
SET PARAMETER ATTR Установка значения атрибута параметра

Рассмотрим пример, в котором затронуты практически все вышеперечисленные функции и процедуры.

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;
< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет