Стр. 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.

Используются технологии uCoz