Стр. 18-1
Глава
18
Использование
PL/SQL в Oracle Forms
Данная глава рассматривает написание программ PL/SQL в прикладных
программах Oracle Forms. Конкретно, она охватывает концепции и синтаксис,
специфические при использовании PL/SQL в Oracle Forms, включая следующие темы:
·
О PL/SQL в
Oracle Forms 18 - 2
·
Вызов
встроенных подпрограмм 18 - 3
·
Обращение к
объектам Oracle Forms в операторах PL/SQL
18 - 8
·
Локальные и
глобальные переменные 18 - 14
·
Системные
переменные 18 - 16
·
Получение
информации с помощью встроенных функций
18 - 18
Стр. 18-2
О PL/SQL в Oracle Forms
PL/SQL - это процедурное расширение Oracle языка базы данных SQL. Он
объединяет возвомжности манипулирования данными и обработки транзакций SQL с
конструкциями, обычно присутствующими в процедурных языках программирования,
такими как объявления переменных и констант, присвоения, циклы и ветвление по
условию.
Вы можете использовать PL/SQL для улучшения и модификации функциональности
по умолчанию, встроенной в каждую форму прикладной программы. Для этого вам
необходимо ознакомиться с концепциями и синтаксисом PL/SQL. Язык PL/SQL
документирован в PL/SQL User’s Guide and
Reference. Данная глава предполагает, что вы знакомы с PL/SQL, и охватывает
темы, специфичные для Oracle Forms.
В Oracle Forms Designer вы пришете программу PL/SQL, если хотите сделать
следующее:
·
создать
триггер
·
создать пункт
меню PL/SQL-типа
·
написать
подпрограмму с именем пользователя
·
написать
пакет PL/SQL
·
определить
программу запуска меню
Когда вы пишете PL/SQL в Oracle Forms, вы пользуетесь интегрированным
редактором PL/SQL Editor. Информацию о командах редактора PL/SQL вы найдете в
Главе 2 “Работа с инструментами проектирования”.
Информацию о создании триггеров см. в Главе 7 “Написание триггеров
событий”.
Информацию о командах элемента меню PL/SQL см. в Главе 22 “Основы
проектирования меню”.
Написание ваших собственных функций и процедур рассматривается в Главе 19
“Написание программных модулей”.
Стр. 18-3
Вызов встроенных подпрограмм
Встроенные подпрограммы - это упакованные процедуры и функции, всегда
доступные в Oracle Forms. Каждая встроенная подпрограмма - это группа
программных команд, исполняющих некоторую функцию прикладной программы.
Встроенные подпрограммы могут вызываться из триггеров, командами элемента меню
и подпрограммами с именем пользователя, но никаким образом не могут
редактироваться или изменяться.
Этот раздел описывает общую технологию вызова встроенных процедур и
функций. Информацию о конкретных встроенных подпрограммах см. в Oracle Forms Reference Manual, Том 1.
Вызов встроенных процедур
Чтобы вызвать процедуру, наберите имя процедуры и какие-либо требующиеся
параметры в качестве оператора в исполнительном разделе блока PL/SQL. Вызов
встроенной процедуры - это полный оператор, и он должен оканчиваться точкой с
запятой.
Go_Item(‘customer.cust_id’);
Процедура GO_ITEM перемещает фокус ввода к элементу, указанному в списке
параметров; в данном случае, к элементу текста cust_id в блоке customer.
Вызов встроенных функций
Многие встроенные подпрограммы в Oracle Forms - это функции. Функция
отличается от процедуры двумя важными чертами:
·
функция
возвращает значение определенного типа
·
функция
представляет выражение определенного типа данных и должна быть частью полного
оператора
Например, вы можете вызвать встроенную функцию GET_ITEM_PROPERTY, если
хотите определить текущую установку свойства элемента.Следующий пример дает
текущую установку свойства Required для элемента customer:
DECLARE
item_required
VARCHAR2 (5);
BEGIN
item_required :=
Get_Item_Property(‘customer.custid’,REQUIRED)
END;
Стр. 18-4
Если вы вызываете встроенную функцию в триггере или в подпрограмме с именем
пользователя, то вам нужно учесть тип данных возвращаемого функцией значения.
Так как возвращаемое значение функции GET_ITEM_PROPERTY - CHAR, то переменная,
которой присваивается это возвращаемое значение, должна быть типа CHAR или
VARCHAR2.
Для формирования выражения функции могут комбинироваться с константами,
переменными и логическими операторами. И, так как они возвращают единственное
значение, функции могут некоторым образом использоваться как локальные
переменные или константы того же типа.
Вот несколько примеров использования возвратных значений функций:
:control.item_a := Message_Text;
В этом примере функция MESSAGE_TEXT возвращает значение CHAR, которое
присваивается элементу формы с именем item_A.
Go_Item(Get_Block_Property(‘customer’,LAST_ITEM));
В этом примере функция GET_BLOCK_PROPERTY используется для получения имени
последнего элемента в блоке customer.
Функция GET_BLOCK_PROPERTY вкладывается в качестве параметра в процедуру
GO_ITEM и ее возвратное значение - это целевой элемент для операции GO_ITEM.
Функция, имеющая возвратное значение типа BOOLEAN, вычисляет или TRUE, или
FALSE, и поэтому может использоваться в качестве выражения в операторе условия.
Следующий пример использует функцию SHOW_LOV для демонстрации этой технологии.
IF Show_LOV(‘customer_list’) THEN
Message(‘Хороший выбор.’);
ELSE
Message(‘Клиент не выбран.’);
END IF;
В этом примере функция SHOW_LOV сначала выводит на экран список значений по
имени customer_list, затем ожидает
ввода оператора; если оператор выбирает из LOV запись, то функция возвращает
TRUE; если оператор покидает LOV, выбрав Cancel, то она возвращает FALSE.
Примечание: Функции не могут использоваться в операторах
DML. Вы можете достигнуть того же результата, присвоив возвратное значение
функции локальной переменной, и затем сослаться на эту переменную в операторе
DML.
Стр. 18-5
Передача параметров подпрограммам
Параметры предоставляют подпрограмме информацию, в которой она нуждается
для успешного выполнения. В функциональном или процедурном вызове параметры
перечисляются после имени функции или процедуры заключенными в скобки.
Каждый из параметров, требуемых функцией или процедурой, определяется ее
спецификацией. Имена параметров в декларации функции или процедуры называются формальными параметрами. В следующем
примере синтаксиса процедуры вы можете видеть, что формальные параметры
включают в себя window_name, width и height:
Resize_Window(window_name,width,height);
Вызывая процедуру RESIZE_WINDOW, вы поставляете для формальных параметров
значения, обращаясь к конкретному окну и указывая нужные значения ширины и
высоты. Значения, которые вы вводите в список параметров, - действительные
параметры. В следующем вызове процедуры my_window,
50 и 35 - действительные
параметры:
Resize_Window(‘my_window,50,35);
О типах параметров
Формальные параметры, как и переменные, - это специальный тип данных. В
следующем примере синтаксиса тип данных указан после каждого имени формального
параметра:
Show_Window(window_name IN CHAR,
x IN NUMBER,
y IN NUMBER);
Return BOOLEAN
Из этого примера вы можете видеть, что функция SHOW_WINDOW принимает
параметры типа CHAR и NUMBER. CHAR и NUMBER - природные типы PL/SQL.
При вызове встроенной подпрограммы действительный параметр может быть любым
выражением, которое вычисляет значение такого же типа, что и формальный
параметр, которому оно соответствует. Это означает, что действительный параметр
может быть локальной или глобальной переменной, функцией или любой комбинацией
переменных, констант и операторов, которые вычисляются до значения
определенного типа.
Стр. 18-6
Использование встроенных констант в качестве действительных параметров
Есть предварительно определенные константы, которые вы можете использовать
для многих встроенных подпрограмм. Взгляните на синтаксис для встроенной
процедуры EXIT_FORM, показанный ниже. EXIT_FORM имеет два необязательных
параметра commit_mode и rollback_mode, предписывающих Oracle
Forms как выходить из формы:
Exit_Form(commit_mode,rollback_mode);
Параметры commit_mode и rollback_mode - типа NUMBER. Когда вы
вызываете EXIT_FORM, то для этих параметров вы можете использовать
предварительно определенные числовые константы. Допустимые константы для параметра
commit_mode включают ASK_COMMIT,
DO_COMMIT, NO_COMMIT и NO_VALIDATE. Допустимые константы для параметра rollback_mode включают NO_ROLLBACK и
TO_SAVEPOINT.
Константы для встроенных подпрограмм - это предварительно определенные
литералы, объявляемые Oracle Forms как NUMBER при запуске. Действительные
числовые значения каждой константы хранятся внутренне и вовне не выводятся.
Если вы используете константы в качестве действительных параметров, то
вводите их явно, как они указаны в синтаксисе, и не заключайте их в кавычки:
Exit_Form(DO_COMMIT,NO_ROLLBACK);
Так как тип встроенных констант NUMBER, они могут присваиваться переменным
NUMBER. Однако, константы не могут находиться в левой части выражения.
Константы, являющиеся допустимыми параметрами для каждой встроенной
подпрограммы, перечислены в Oracle Forms
Reference Manual, Том 1.
О значениях параметров по умолчанию
Некоторые параметры для встроенных функций и процедур имеют предварительно
определенные значения по умолчанию. Если вы не предоставите для формального
параметра действительный параметр, то Oracle Forms использует значение по
умолчанию, определенное для этого параметра. Рассмотрим процедуру CALL_FORM,
которая вызывает модуль новой формы, оставляя активной модуль текущей формы.
Следующий пример показывает синтаксис для процедуры CALL_FORM:
Open_Form(form_name,activate_mode,session_mode);
Значения параметров по умолчанию, определенные для параметров activate_mode и session_mode, соответственно константы ACTIVATE и NO_SESSION.
Стр. 18-7
Если вы вызываете OPEN_FORM без параметров, то Oracle Forms неявно
использует параметры по умолчанию:
Open_Form(‘order_entry’);
Всегда приемлемо вводить значения параметров по умолчанию, если вы хотите
это сделать ради ясности. Следующие вызовы процедур эквивалентны; первый
требует меньшего числа нажатий клавиш, второй более нагляден:
Open_Form(‘ordery_entry’);
Open_Form(‘ordery_entry’,ACTIVATE,NO_SESSION);
Позиционное или именное обозначение
Для передачи параметров подпрограмме вы можете использовать или позиционное,
или именное обозначение. При использовании позиционного обозначения компилятор
для определения формальных параметров, которым соответствуют действительные,
смотрит на относительные позиции этих действительных параметров.
Следующий пример показывает синтаксис для процедуры с именем пользователя
по имени update_inventory:
PROCEDURE update_inventory(warehouse
CHAR, product NUMBER);
Для вызова этой процедуры с использованием позиционного обозначения вы
должны вводить действительные параметры в том же порядке, в котором
располагаются в спецификации соответствующие формальные параметры:
update_inventory(‘chicago’,10557);
Когда вы пишете параметры с использованием именного обозначения,
соответствие между формальным и действительным параметром устанавливается явно
в самом списке параметров и вы можете передавать параметры в любом порядке.
Поэтому следующие вызовы процедур логически эквивалентны:
update_inventory(warehouse=>‘chicago’,product=>10557);
update_inventory(product=>10557,warehouse=>‘chicago’);
Вы можете смешивать позиционное и именное обозначения при условии, чтобы в
списке параметров параметры, передаваемые позицией, предшествовали передаваемым
именем:
update_inventory(‘chicago’,product=>10557);
Для большинства встроенных подпрограмм использование позиционного
обозначения предпочтительнее, чем именного, потому что оно требует меньшего
числа нажатий клавиш. Однако, именное обозначение может быть особенно полезным
при вызове встроенных подпрограмм, имеющих два или более необязательных
параметра. При именном обозначении вам нужно только дать значения для тех
необязательных параметров, которые вы хотите передать, а остальные можно
оставить неопределенными.
Стр. 18-8
Обращение к объектам Oracle Forms в операторах PL/SQL
Когда вы пишете PL/SQL в триггерах, командах элементов меню и подпрограммах
с именем пользователя, вам часто бывает необходимо обращаться к таким объектам
прикладной программы, как окна, блоки и элементы. Данный раздел объясняет
обращение к объектам Oracle Forms в вызовах встроенных подпрограмм и
подпрограмм с именем пользователя, и в операторах PL/SQL.
Обращение к объектам по имени
Чтобы обратиться к объекту по имени в операторе PL/SQL, заключите имя
объекта в одиночные кавычки:
‘form_module_name’
‘block_name’
‘window_name’
Например, когда вы вызываете процедуру RESIZE_WINDOW, вы должны в качестве
параметра передать имя окна, размеры которого нужно изменить. Имя окна должно
быть заключено в одиночные кавычки:
Resize_Window(‘status_window’,50,35);
Чтобы обратиться по имени к элементу,
для формирования полного имени включите имя блока, которому принадлежит
элемент:
‘block_name.item_name’
Например, когда для перемещения фокуса ввода в другой элемент вы вызываете
встроенную процедуру GO_ITEM, вы передаете GO_ITEM имя целевого элемента:
Go_Item(‘customer.cust_id’);
Для обращения к конкретной колонке в группе записей:
‘record_group_name.column_name’
Стр. 18-9
Обращение к значениям элементов
Значения хранят следующие типы элементов:
·
переключатели
·
элементы
неизменного текста
·
элементы
списка
·
радио-группы
·
элементы
текста
·
OLE-контейнеры
·
VBX control
Чтобы обратиться к значению, хранимому элементом, перед полным именем
элемента поместите двоеточие. При обращении к значению элемента не окружайте
кавычками его имя.
:block_name.item_name
Этот синтаксис подобен тому, что используется в Oracle Forms для обращения
к глобальным переменным. Фактически значения элементов можно использовать в
операторах PL/SQL точно так же, как локальные или глобальные переменные. Это
означает, что вы должны делать все из нижеследующего:
Присваивать элементу значения выражения:
:ord.total := price * .85;
Присваивать значение одного элемента другому:
:ord.comment := :control.textfield;
Выбирать в элементы значения базы данных:
SELECT phone INTO :info.tel_no FROM warehouse
WHERE id = :info.warehouse_id;
Стр.
18-10
Обращение к объектам по внутреннему идентификатору
Каждому создаваемому вами объекту Oracle Forms присваивает идентификатор.
Идентификатор объекта - это внутреннее средство управления, действительное
значение которого никогда не материализуется.
Вы можете получить идентификатор объекта, вызвав встроенную функцию FIND_,
соответствующую этому классу объектов. Функции FIND_ принимают в качестве
параметров полные имена объектов.
В следующем примере функция FIND_WINDOW используется для присвоения
идентификатора окна my_window
переменной id_var:
DECLARE
id_var WINDOW;
BEGIN
id_var := Find_Window(‘my_window’);
END;
Присвоив идентификатор объекта переменной, вы можете использовать эту
переменную для обращения к этому объекту, не обращаясь к нему по имени.
Например, синтаксис для процедуры RESIZE_WINDOW указывает, что вы можете
вызывать ее или с именем окна, или с его идентификатором:
Resize_Window(window_name CHAR,width NUMBER,height NUMBER);
Resize_Window(window_id WINDOW,width NUMBER,height NUMBER);
Таким образом, следующие вызовы эквивалентны:
Resize_Window(‘my_window,50,35);
Resize_Window(id_var,width
NUMBER,height NUMBER);
Функция FIND_ может также использоваться в качестве действительного
параметра в вызове процедуры или функции:
Resize_Window((FIND_WINDOW(‘my_window’),50,35);
Смешивание имен и идентификаторов в
списках параметров В одном списке параметров вы можете
смешивать идентификаторы и имена объектов при условии, что каждый
действительный параметр обращается к отдельному объекту:
Replace_Content_View(canvas_id,’window_name’);
Однако, вы не можете использовать идентификаторы объектов и имена объектов
для формирования полного имени объекта:
/* неправильный вызов процедуры */
Set_Group_Char_Cell(group_id.’column_name’,1,’in_stock’);
Стр.
18-11
Типы идентификаторов объектов
Возвратные значения функций FIND_, то есть сами идентификаторы объектов,
имеют специальный тип данных. В примере синтаксиса процедуры RESIZE_WINDOW вы
видели, что формальный параметр window_id
был объявлен как тип WINDOW. Типы для идентификаторов объектов в Oracle Forms
предварительно определены. Для каждого класса объектов есть свой тип.
Типы данных Oracle Forms
Следующая таблица показывает функцию FIND_ и тип возврата для каждого
объекта:
Объект |
Функция |
Тип возврата |
Сигнал |
FIND_ALERT |
ALERT |
Блок |
FIND_BLOCK |
BLOCK |
Картинка |
FIND_CANVAS |
CANVAS |
Колонка группы записей |
FIND_COLUMN |
GROUPCOLUMN |
Редактор |
FIND_EDITOR |
EDITOR |
Форма |
FIND_FORM |
FORMMODULE |
Группа записей |
FIND_GROUP |
RECORDGROUP |
Элемент |
FIND_ITEM |
ITEM |
Список значений |
FIND_LOV |
LOV |
Элемент меню |
FIND_MENU_ITEM |
MENUITEM |
Список параметров |
GET_PARAMETER_LIST |
PARAMLIST |
Отношение |
FIND_RELATION |
RELATION |
Таймер |
FIND_TIMER |
TIMER |
Вид |
FIND_VIEW |
VIEWPORT |
Объявление переменных для
идентификаторов объектов Прежде чем вы присвоите идентификатор
объекта локальной переменной, вы должны объявить эту переменную так, чтобы она
была того же типа, что и идентификатор объекта:
DECLARE
id_var WINDOW
BEGIN
id_var := Find_Window(‘my_window’);
IF Get_Window_Property(id_var, HEIGHT) < 25
THEN
Resize_Window(id_var,50,35);
END IF;
END;
Стр.
18-12
Для чего использовать идентификаторы
объектов? Есть две причины для использования
идентификаторов объектов в вашей программе PL/SQL:
·
Использование
идентификаторов объектов повышает производительность.
·
Использование
идентификаторов объектов делает программу более общей и легкой для поддержки.
Всякий раз, когда вы в операторе PL/SQL обращаетесь к объекту по имени,
Oracle Forms выполняет необходимые действия для внутреннего определения
идентификатора этого объекта. Если в одном триггере вы обращаетесь к объекту по
имени не один раз, то Oracle Forms каждый раз определяет идентификатор этого
объекта. Следующая программа триггера обращается к объекту my_record_group три раза:
DECLARE
dummy_var NUMBER;
count NUMBER;
BEGIN
dummy_var := Populate_Group(‘my_record_group’);
count := Get_Group_Row_Count(‘my_record_group’);
IF count > 20 THEN
Delete_Group_Row(‘my_record_group’,ALL_ROWS);
END IF;
END;
И наоборот, если вы обратитесь к объекту по его идентификатору, то Oracle
Forms будет определять объект только один раз - когда вы первоначально вызовите
функцию FIND_ для получения идентификатора:
DECLARE
dummy_var NUMBER;
count NUMBER;
group RECORDGROUP
:= Find_Group(‘my_record_group’);
BEGIN
dummy_var := Populate_Group(group);
count := Get_Group_Row_Count(group);
IF count > 20 THEN
Delete_Group_Row(group,ALL_ROWS);
END IF;
END;
Кроме повышения производительности, использование идентификаторов объектов
приводит к облегчению поддержки программы и дает возможность повторно ее
использовать в других местах. Когда вам нужно изменить имя объекта или вы
хотите повторно использовать эту программу для работы с другим объектом, вам
нужно только сделать изменения в списке параметров первоначальной функции
FIND_, но не в каждом операторе, который обращается к этому объекту.
Стр.
18-13
Непрямое обращение к элементам
С помощью встроенных подпрограмм NAME_IN и COPY вы можете производить
непрямое обращение к элементам.
Функция NAME_IN Функция
NAME_IN возвращает содержимое указанной переменной или элемента. Пользуйтесь
функцией NAME_IN для получения значения элемента , не обращаясь к нему прямо.
Следующие операторы эквивалентны:
IF :emp.ename = ‘smith’ -- прямое обращение
IF NAME_IN(‘emp.ename’) = ‘smith’ -- непрямое обращение
Возвратное значение - всегда символьная цепочка. Чтобы использовать NAME_IN
для элемента DATE или NUMBER, преобразуйте цепочку в нужный тип данных с
помощью соответствующей функции преобразования:
date_var := TO_DATE(Name_In(‘order.date_item’));
num_var := TO_NUMBER(Name_In(‘order.number_item’));
Процедура COPY Процедура
COPY присваивает указанное значение указанной переменной или элементу. В
отличие от стандартного присвоения PL/SQL использование процедуры COPY
позволяет вам непрямо обращаться к элементу, значение которого устанавливается:
:emp.ename := ‘smith’; -- прямое обращение
Copy(‘smith’,’emp.ename’); -- непрямое обращение
COPY может использоваться с функцией NAME_IN для присвоения значения
элементу, имя которого хранится в той переменной или элементе, куда
производится обращение:
/* помещаем значение ‘smith’ в элемент, имя которого хранится в ref_item */
Copy(‘smith’,Name_In(‘control.ref_item’));
Для чего использовать непрямое
обращение Непрямое обращение к элементам позволяет вам
писать более общие, повторно используемые программы. Используя переменные на
месте действительных имен элементов, вы можете написать подпрограмму, которая
сможет работать с любым элементом, имя которого может присваиваться указанной
переменной.
А также, использование непрямого обращения обязательно при обращении к
значению переменной, ограниченной формой (элементу, параметру, глобальной
переменной) в программе PL/SQL, которую вы пишете в модуле библиотеки или меню.
Так как библиотеки, меню и формы - отдельные модули прикладной программы,
вы не можете прямо обращаться к значению элемента формы в команде элемента меню
или в процедуре библиотеки. Дополнительную информацию по этой теме см. в Главе
20 “Работа с библиотеками” и Главе 22 “Основы проектирования меню”.
Стр.
18-14
Локальные и глобальные переменные
В любом создаваемом триггере, команде элемента меню, подпрограмме с именем
пользователя или пакете PL/SQL вы можете объявлять локальные и глобальные
переменные. Вы можете также использовать как переменную любой элемент формы,
который хранит значение.
Локальные переменные
Локальная переменная - это переменная PL/SQL, значение которой доступно
только в пределах триггера или подпрограммы с именем пользователя, в которой
эта переменная была объявлена. Oracle Forms поддерживает поддерживает
стандартное PL/SQL объявление и присвоение для локальных переменных.
Глобальные переменные
Глобальная переменная - это переменная Oracle Forms, значение которой
доступно в триггерах и подпрограммах в любом активном в течение сеанса модуле.
Глобальная переменная хранит символьную цепочку длиной до 255 символов.
Глобальные переменные формально не объявляются так, как локальные
переменные PL/SQL. Вместо этого вы инициализируете глобальную переменную в тот
момент, когда в первый раз присваиваете ей значение:
:GLOBAL.my_var := TO_CHAR(:order.total * .85);
Для обращения к глобальной переменной ставьте впереди имени переменной
слово GLOBAL и двоеточие. Следующий пример показывает глобальную переменную,
передаваемую как действительный параметр при вызове процедуры:
calculate_discount(TO_NUMBER(:GLOBAL.my_var));
Обращение к глобальной переменной, не инициализированной через присвоение,
вызывает ошибку выполнения.
Для уничтожения глобальной переменной и освобождения памяти используйте
встроенную процедуру ERASE:
Erase(‘GLOBAL.my_var’);
Инициализация глобальных переменных значением по умолчанию
Для присвоения значения переменной, значение которой NULL, вы можете
использовать встроенную процедуру DEFAULT_VALUE. Если значение указанной переменной
не NULL, то DEFAULT_VALUE не делает ничего. Если переменная, которой
присваивается значение, - неопределенная глобальная переменная, то Oracle Forms
создает эту переменную.
Стр.
18-15
Следующий пример создает глобальную переменную с именем country и инициализирует ее на значение FRANCE:
Default_Value(‘FRANCE’,’GLOBAL.country’);
Использование элементов NULL-картинка как переменных
Элемент NULL-картинка - это элемент, свойство Canvas которого осталось
неопределенным, и поэтому ему не присвоена картинка. Элемент NULL-картинка во
время выполнения на экран не выводится и операторы не могут видеть его или
взаимодействовать с ним.
Вы можете использовать элемент NULL-картинка для временного хранения
значений данных, как в глобальной переменной. Например, вы можете в управляющем
блоке определить элемент типа NUMBER и затем обращаться к его значению в
триггерах и подпрограммах с именем пользователя:
IF :control.count > 200 THEN
...
Любой тип элемента, способный хранить значение, может использоваться как
переменная элемента NULL-картинка. Хороший вариант - элементы неизменного
текста, так как они используют меньше памяти, чем другие типы элементов.
Рассмотрим следующие факторы при принятии решения об использовании в
качестве переменной глобальной переменной или элемента NULL-картинка:
·
Элементы
могут определяться как типы данных CHAR, NUMBER или DATE; глобальные переменные
хранят только символьные цепочки, и использование функций преобразования, таких
как TO_DATE и TO_NUMBER требует дополнительной обработки.
·
Размеры
элементов можно регулировать установкой их свойства Maximum Length; глобальные
переменные всегда 255 байтов.
·
Глобальные
переменные в течение сеанса видны по многим модулям; элементы NULL-картинка -
нет.
·
Операция
CLEAR_FORM устанавливает значение элемента NULL-картинка в текущей форме на
NULL; на значение глобальной переменной CLEAR_FORM не влияет.
·
В дизъюнкте
WHERE по умолчанию оператора SQL для блока с базовой таблицей и группы записей
может производиться обращение как к элементам, так и к глобальным переменным.
Стр.
18-16
Системные переменные
Oracle Forms предоставляет встроенные системные переменные, которые
отслеживают условия статуса выволнения в течение сеанса Oracle Forms Runform.
Вы можете считывать значения этих переменных в любой триггер формы или
подпрограмму с именем пользователя.
Информацию о специальных встроенных системных переменных вы найдете в
сопровождающей помощи или в Oracle Forms
Reference Manual, Том 1.
Доступны следующие встроенные системные переменные:
SYSTEM.BLOCK_STATUS
SYSTEM.COORDINATION_OPERATION
SYSTEM.CURRENT_BLOCK
SYSTEM.CURRENT_DATETIME
SYSTEM.CURRENT_ITEM
SYSTEM.CURRENT_FORM
SYSTEM.CURRENT_VALUE
SYSTEM.CURSOR_BLOCK
SYSTEM.CURSOR_ITEM
SYSTEM.CURSOR_RECORD
SYSTEM.CURSOR_VALUE
SYSTEM.CUSTOM_ITEM_EVENT
SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS
SYSTEM.DATE_THRESHOLD
SYSTEM.EFFECTIVE_DATE
SYSTEM.EVENT_WINDOW
SYSTEM.FORM_STATUS
SYSTEM.LAST_QUERY
SYSTEM.LAST_RECORD
SYSTEM.MESSAGE_LEVEL
SYSTEM.MODE
SYSTEM.MOUSE_BUTTON_PRESSED
SYSTEM.MOUSE_BUTTON_SHIFT_STATE
SYSTEM.MOUSE_CANVAS
SYSTEM.MOUSE_FORM
SYSTEM.MOUSE_ITEM
SYSTEM.MOUSE_RECORD
SYSTEM.MOUSE_RECORD_OFFSET
SYSTEM.MOUSE_WINDOW
SYSTEM.MOUSE_X_POS
SYSTEM.MOUSE_Y_POS
SYSTEM.RECORD_STATUS
SYSTEM.SUPPRESS_WORKING
SYSTEM.TRIGGER_BLOCK
Стр. 18-17
SYSTEM.TRIGGER_ITEM
SYSTEM.TRIGGER_RECORD
Все системные переменные только-читаемые, кроме четырех:
SYSTEM.MESSAGE_LEVEL
SYSTEM.DATE_THRESHOLD
SYSTEM.EFFECTIVE_DATE
SYSTEM.SUPPRESS_WORKING
Системные переменные со значением по умолчанию
Для установки значения свойства элемента Default Value могут использоваться
только следующие переменные даты/времени:
$$DATE$$
$$DATETIME$$
$$DBDATE$$
$$DBDATETIME$$
$$DBTIME$$
$$TIME$$
Если вам в одном блоке нужно обращаться к встроенной системной переменной
более одного раза, то вы можете избежать ненужных повторных вызовов от
локального ядра PL/SQL к Oracle Forms, присвоив значение системной переменной
локальной переменной PL/SQL.
Стр.
18-18
Получение информации с помощью встроенных функций
Некоторые встроенные функции, доступные в Oracle Forms, предоставляют такую
же информацию о статусе выполнения, как и встроенные системные переменные.
Имена этих функций показывает следующий список:
DBMS_ERROR_TEXT
DBMS_ERROR_CODE
ERROR_CODE
ERROR_TEXT
ERROR_TYPE
GET_APPLICATION_PROPERTY
GET_BLOCK_PROPERTY
GET_FORM_PROPERTY
GET_ITEM_PROPERTY
GET_RECORD_PROPERTY
GET_RELATION_PROPERTY
MESSAGE_CODE
MESSAGE_TEXT
MESSAGE_TYPE
Вы можете оценивать значения этих функций в любое время сеанса. Информацию
об этих спецфункциях вы найдете в Oracle
Forms Reference Manual, Том 1.