NAME_IN вграден в Oracle D2k Forms
Описание
Връща стойността на посочената променлива.
Върнатата стойност е под формата на символен низ. Можете обаче да използвате NAME_IN, за да върнете
числа и дати като низове от знаци и след това да конвертирате тези низове в подходящите типове данни. Вие
можете да използвате върнатата стойност, както бихте използвали всяка стойност в рамките на изпълним израз.
Ако вложите функцията NAME_IN, Form Builder оценява отделните функции NAME_IN от
най-вътрешната до най-външната едно.
Синтаксис
ИМЕ НА FUNCTION_IN
(име_променлива VARCHAR2);
Вграден тип неограничена функция
Връща VARCHAR2
Влезте в режим на заявка да
Параметри
име_променлива Указва валидна променлива или текстов елемент. Типът данни на името е
VARCHAR2.
Забележки за употреба
Ако върнатата стойност е низ от дата, NAME_IN ще използва маската на формат, посочена в свойството
BUILTIN_DATE_FORMAT. Ако свойството DATE_FORMAT_COMPATIBILITY_MODE
е зададено на 4.5, американският формат по подразбиране се използва за форматиране на върнатия низ.
Примери NAME_IN
/*
** Вградено:NAME_IN
** Пример:Опростено внедряване на механизъм Last-In-First-Out
** с помощта на глобални променливи.
** За всеки именуван стек глобална променлива
** GLOBAL.<име на стека>_PTR сочи към най-големия
** елемент в стека. PUSH увеличава тази
** стойност, когато се добавят нови елементи. Стойности
** PUSH'ed или POP'ed от наименования стек са
** всъщност се съхраняват в GLOBAL променливи на
** удобно формирано име:GLOBAL.
** където 'nnn' е номерът на елемента в
** стека.
**
** Използване:
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Получава ’2’
** str_var :=Pop(’MYSTACKNAME’); -- Получава ’1’
** str_var :=Pop(’MYSTACKNAME’); -- Получава ’EOS’
**
*/
ПРОЦЕДУРА Push ( the_stackname VARCHAR2,
the_value VARCHAR2) IS
ptr_name VARCHAR2(40); -- Името на указателя на този стек
префикс VARCHAR2(40); -- Общ префикс за vars за съхранение
elt_name VARCHAR2(40); -- Име на елемента за съхранение
new_idx VARCHAR2(4); -- Нова стойност на указател на стека
BEGIN
/*
** За всеки именуван стек, който препращаме, глобалните
** променливи, използвани за съхраняване на стойностите на стека и
** всички указатели на стека започват с общ префикс:
** GLOBAL.<име на стека>
*/
префикс :='GLOBAL.' || the_stackname;
/*
** Указателят на този именуван стек се намира в
** GLOBAL.<име на стека>_PTR Не забравяйте, че това е *name*
** на указателя.
*/
ptr_name :=префикс || '_PTR';
/*
** Инициализирайте указателя на стека със стойност по подразбиране
** нула, ако указателят на стека не е съществувал преди това, т.е.
** GLOBAL .<име на стека>_PTR тепърва трябваше да бъде създаден.
*/
Стойност по подразбиране ('0', ptr_name );
/*
** Тъй като натискаме нов елемент в стека,
** увеличете указателя на стека, за да отразите позицията на този нов
** елемент. Не забравяйте, че GLOBAL променливите са
** винаги от тип VARCHAR2, така че трябва да ги преобразуваме в TO_NUMBER
** преди всякакви изчисления.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Определете името на глобалната променлива, която ще
** съхранява предадената стойност in, GLOBAL.
** Това е просто префиксът, свързан към новия индекс
** номер, който току-що изчислихме по-горе.
*/
elt_name :=prefix||new_idx;
Копиране( the_value , elt_name );
END;
FUNCTION Pop (the_stackname VARCHAR2)
ВЪРНАНЕ VARCHAR2 Е
ptr_name VARCHAR2(40); -- Името на указателя на този стек
префикс VARCHAR2(40); -- Общ префикс за vars за съхранение
elt_name VARCHAR2(40); -- Име на елемента за съхранение
new_idx VARCHAR2(4); -- Нова стойност на указател на стека
cur_idx VARCHAR2(4); -- Текуща стойност на указател на стека
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** За всеки именуван стек, който препращаме, започват глобалните
** променливи, използвани за съхраняване на стойностите на стека и
** указателят на стека с общ префикс:
** GLOBAL.<име на стека>
*/
префикс :='GLOBAL.' || the_stackname;
/*
** Указателят на този именуван стек се намира в
** GLOBAL.<име на стека>_PTR Не забравяйте, че това е *name*
** на указателя.
*/
ptr_name :=префикс || ’_PTR’;
/*
** Принудително задаване на стойност по подразбиране NULL, за да можем да тестваме дали указателят
** съществува (като глобална променлива). Ако не
** съществува, можем да тестваме след момент за NULL и да избегнем
** типичната грешка, дължаща се на препращане към несъществуващи
** глобални променливи.
*/
Стойност по подразбиране( NULL, ptr_name );
/*
** Ако *стойността*, съдържаща се в показалеца, е NULL, тогава
** указателят не трябва са съществували преди изявлението
** Default_Value по-горе. Върнете константата
** NO_SUCH_STACK в този случай и изтрийте глобалната
** променлива, която Default_Value имплицитно създаде.
*/
IF Name_In(ptr_name) Е NULL THEN
the_val :=NO_SUCH_STACK;
Erase(ptr_name );
/*
** В противен случай посоченият стек вече съществува. Вземете
** индекса на най-големия елемент на стека от
** указателя на този стек.
*/
ELSE
cur_idx :=Name_In(ptr_name);
/*
** Ако индексът е нула, тогава посоченият стек вече е
** празен, така че върнете константата EMPTY_STACK и оставете
** указателя на стека за по-късно използвайте, т.е. не
** го ИЗТРИВАТЕ.
**
** Обърнете внимание, че стекът може да бъде празен само ако някои стойности
** са били PUSH и след това всички стойности впоследствие
** POP'ed. Ако в този стек с име
** не бяха въведени стойности, тогава нямаше да е създаден асоцииран указател на стек
** и ние ще маркираме тази грешка с
** NO_SUCH_STACK случай по-горе.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Ако индексът е различен от нула, тогава :
** (1) Определете името на глобалната променлива в
**, в която се съхранява стойността, която трябва да бъде POP'ed,
** GLOBAL.
** (2) Вземете стойността на (cur_idx)-тия елемент до
** return
** (3) Намалете указателя на стека
** (4) Изтрийте глобалната променлива, която е била използвана за
** съхранение на стойности
*/
ELSE
elt_name:=префикс || cur_idx;
the_val :=Name_In( elt_name );
new_idx :=TO_CHAR( TO_NUMBER( Name_In(ptr_name) ) - 1 );
Copy( new_idx , ptr_name );
Изтриване ( elt_name );
КРАЙ АКО;
КРАЙ АКО;
ВРЪЩАНЕ на_val;
КРАЙ;