NAME_IN vestavěný v Oracle D2k Forms
Popis
Vrátí hodnotu uvedené proměnné.
Vrácená hodnota je ve formě znakového řetězce. Pomocí NAME_IN však můžete vrátit
čísla a data jako znakové řetězce a poté tyto řetězce převést na příslušné datové typy. Vrácenou hodnotu
můžete použít stejně, jako byste použili jakoukoli hodnotu ve spustitelném příkazu.
Pokud vnoříte funkci NAME_IN, Form Builder vyhodnotí jednotlivé funkce NAME_IN od
nejvnitřnější po nejvzdálenější jedna.
Syntaxe
NÁZEV FUNKCE_IN
(název_proměnné VARCHAR2);
Vestavěný typ neomezená funkce
Vrátí VARCHAR2
Vstoupit do režimu dotazování ano
Parametry
název_proměnné Určuje platná proměnná nebo textová položka. Datový typ názvu je
VARCHAR2.
Poznámky k použití
Pokud je vrácená hodnota řetězec data, NAME_IN použije masku formátu zadanou ve vlastnosti
BUILTIN_DATE_FORMAT. Pokud je vlastnost DATE_FORMAT_COMPATIBILITY_MODE
nastavena na 4.5, použije se k formátování vráceného řetězce výchozí americký formát.
Příklady NAME_IN
/*
** Vestavěný:NAME_IN
** Příklad:Jednoduchá implementace zásobníku Last-In-First-Out
** pomocí globálních proměnných.
** Pro každý pojmenovaný zásobník ukazuje globální proměnná
** GLOBAL.
** prvek v zásobníku. PUSH zvyšuje tuto
** hodnotu při přidávání nových prvků. Hodnoty
** PUSH'ed on nebo POP's off z pojmenovaného zásobníku jsou
** ve skutečnosti uloženy v GLOBAL proměnných
** vhodně vytvořeného názvu:GLOBAL.
** kde 'nnn' je číslo prvku v zásobníku
**.
**
** Použití:
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Získá '2'
** str_var :=Pop('MYSTACKNAME'); -- Získá '1'
** str_var :=Pop('MYSTACKNAME'); -- Získá 'EOS'
**
*/
PROCEDURE Push ( název_zásobníku VARCHAR2,
hodnota VARCHAR2 ) JE
jméno_ptr VARCHAR2(40); -- Název ukazatele tohoto zásobníku
předpona VARCHAR2(40); -- Společná předpona pro vars úložiště
elt_name VARCHAR2(40); -- Název prvku úložiště
new_idx VARCHAR2(4); -- Nová hodnota ukazatele zásobníku
BEGIN
/*
** Pro jakýkoli pojmenovaný zásobník, na který odkazujeme, globální
** proměnné používané pro ukládání hodnot zásobníku a
** všechny ukazatele zásobníku začínají společnou předponou:
** GLOBAL.
*/
předpona :='GLOBAL.' || the_stackname;
/*
** Ukazatel tohoto pojmenovaného zásobníku se nachází v
** GLOBAL.
** ukazatele.
*/
jméno_ptr :=předpona || '_PTR';
/*
** Inicializujte ukazatel zásobníku s výchozí hodnotou
** nula, pokud ukazatel zásobníku dříve neexistoval, tj.
** GLOBAL .
*/
Default_Value( '0', název_ptr );
/*
** Protože tlačíme na nový prvek v zásobníku,
** zvýší ukazatel zásobníku tak, aby odrážel pozici tohoto nového
** prvku. Pamatujte, že GLOBAL proměnné jsou
** vždy typu VARCHAR2, takže je musíme před jakýmikoli výpočty převést na TO_NUMBER
**.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Určete název globální proměnné, do které se
** uloží předaná hodnota in, GLOBAL.
** Toto je jednoduše předpona zřetězená k novému číslu indexu
**, které jsme právě vypočítali výše.
*/
elt_name :=prefix||new_idx;
Copy( the_value, elt_name );
END;
FUNCTION Pop (the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2(40); -- Název ukazatele tohoto zásobníku
předpona VARCHAR2(40); -- Společná předpona pro vars úložiště
elt_name VARCHAR2(40); -- Název prvku úložiště
new_idx VARCHAR2(4); -- Nová hodnota ukazatele zásobníku
cur_idx VARCHAR2(4); -- Aktuální hodnota ukazatele zásobníku
hodnota VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** Pro každý pojmenovaný zásobník, na který odkazujeme, začínají globální
** proměnné používané pro ukládání hodnot zásobníku a
** ukazatel zásobníku se společnou předponou:
** GLOBAL.
*/
předpona :='GLOBAL.' || the_stackname;
/*
** Ukazatel tohoto pojmenovaného zásobníku se nachází v
** GLOBAL.
** ukazatele.
*/
jméno_ptr :=předpona || ’_PTR’;
/*
** Vynutí výchozí hodnotu NULL, abychom mohli otestovat, zda existuje ukazatel
** (jako globální proměnná). Pokud neexistuje
**, můžeme za chvíli otestovat hodnotu NULL a vyhnout se
** typické chybě kvůli odkazování na neexistující
** globální proměnné.
Default_Value( NULL, ptr_name );
/*
** Pokud je *hodnota* obsažená v ukazateli NULL, pak
** ukazatel nesmí existovaly před
** prohlášením Default_Value výše. V tomto případě vraťte konstantu
** NO_SUCH_STACK a vymažte globální proměnnou
**, kterou Default_Value implicitně vytvořila.
*/
IF Name_In( ptr_name ) JE NULL THEN
the_val :=NO_SUCH_STACK;
Erase( ptr_name );
/*
** Jinak pojmenovaný zásobník již existuje. Získejte
** index největšího prvku zásobníku z ukazatele
** tohoto zásobníku.
*/
ELSE
cur_idx :=Name_In( ptr_name );
/*
** Pokud je index nula, pak je pojmenovaný zásobník již
** prázdný, takže vraťte konstantu EMPTY_STACK a ponechte
** ukazatel zásobníku na později používat, tj. ne
** VYMAZAT jej.
**
** Všimněte si, že zásobník může být prázdný pouze v případě, že některé hodnoty
** byly PUSH'ed a pak všechny hodnoty následně
** POP'ed. Pokud by na tomto zásobníku s názvem
** nebyly nikdy PUSH'ed žádné hodnoty, pak by nebyl vytvořen žádný přidružený ukazatel zásobníku
** a tuto chybu bychom označili pomocí
** NO_SUCH_STACK případ výše.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Pokud je index nenulový, pak :
** (1) Určete název globální proměnné
**, ve které je uložena hodnota, která má být odeslána POP,
** GLOBAL.
** (2) Získejte hodnotu (cur_idx)-tého prvku na
** return
** (3) Snižte ukazatel zásobníku
** (4) Vymažte globální proměnná, která byla použita pro
** ukládání hodnot
*/
ELSE
elt_name:=prefix || cur_idx;
the_val :=Name_In( elt_name );
new_idx :=TO_CHAR( TO_NUMBER( Name_In(ptr_name) ) - 1 );
Copy( new_idx , ptr_name );
Erase ( elt_name );
END IF;
END IF;
RETURN the_val;
END;