NAME_IN wbudowane w Oracle D2k Forms
Opis
Zwraca wartość wskazanej zmiennej.
Zwrócona wartość ma postać ciągu znaków. Możesz jednak użyć NAME_IN, aby zwrócić
liczby i daty jako ciągi znaków, a następnie przekonwertować te ciągi na odpowiednie typy danych.
Możesz użyć zwróconej wartości tak samo, jak każdej wartości w instrukcji wykonywalnej.
Jeśli zagnieździsz funkcję NAME_IN, Kreator formularzy oceni poszczególne funkcje NAME_IN od
najbardziej wewnętrznej do zewnętrznej jeden.
Składnia
NAZWA FUNKCJI_IN
(nazwa zmiennej VARCHAR2);
Funkcja wbudowana bez ograniczeń
Zwraca VARCHAR2
Wejście do trybu zapytania tak
Parametry
nazwa zmiennej Określa poprawna zmienna lub element tekstowy. Typ danych nazwy to
VARCHAR2.
Uwagi dotyczące użytkowania
Jeśli zwracana wartość jest ciągiem daty, NAME_IN użyje maski formatu określonej we właściwości
BUILTIN_DATE_FORMAT. Jeśli właściwość DATE_FORMAT_COMPATIBILITY_MODE
jest ustawiona na 4.5, do formatowania zwracanego ciągu używany jest domyślny format amerykański.
Przykłady NAME_IN
/*
** Wbudowane:NAME_IN
** Przykład:Prosta implementacja mechanizmu stosu Last-In-First-Out
** przy użyciu zmiennych globalnych.
** Dla każdego nazwanego stosu zmienna globalna
** GLOBAL.
** element na stosie. PUSH zwiększa tę
** wartość w miarę dodawania nowych elementów. Wartości
** PUSH lub POP'ed off na nazwanym stosie są
** faktycznie przechowywane w zmiennych GLOBALNYCH o
** wygodnie uformowanej nazwie:GLOBAL.
** gdzie 'nnn' jest numerem elementu na stosie
**.
**
** Użycie:
** Push('MYSTACKNAME' , '1');
** Push('NAZWA_STOSU', '2');
**
** str_var :=Pop('NAZWA_STOSU'); -- Pobiera '2'
** str_var :=Pop('NAZWA_STOSU'); -- Pobiera '1'
** str_var :=Pop('NAZWA_STOSU'); -- Pobiera „EOS”
**
*/
PROCEDURA Push ( nazwa_stosu VARCHAR2,
wartość_VARCHAR2 ) JEST
nazwa_ptr VARCHAR2(40); -- Nazwa wskaźnika tego stosu
przedrostek VARCHAR2(40); -- Wspólny przedrostek dla zmiennych pamięci
elt_name VARCHAR2(40); -- Nazwa elementu pamięci
new_idx VARCHAR2(4); -- Nowa wartość wskaźnika stosu
POCZĄTEK
/*
** Dla dowolnego nazwanego stosu, do którego się odwołujemy, globalne
** zmienne używane do przechowywania wartości stosu i
** wszystkie wskaźniki stosu zaczynają się wspólnym przedrostkiem:
** GLOBALNY.
*/
prefiks :='GLOBALNY.' || the_stackname;
/*
** Ten nazwany wskaźnik stosu znajduje się w
** GLOBALNYM.
** wskaźnika.
*/
nazwa_ptr :=prefiks || '_PTR';
/*
** Zainicjuj wskaźnik stosu domyślną wartością
** zero, jeśli wskaźnik stosu wcześniej nie istniał, tj.
** GLOBALNY .
*/
Default_Value( '0', nazwa_ptr );
/*
** nowy element na stosie,
** zwiększa wskaźnik stosu, aby odzwierciedlić pozycję tego nowego
** elementu. Pamiętaj, że zmienne GLOBALNE są
** zawsze typu VARCHAR2, więc musimy je przekonwertować na TO_NUMBER
** przed jakimikolwiek obliczeniami.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( nazwa_ptr ) ) + 1 );
Kopiuj( new_idx , nazwa_ptr );
/*
** Określ nazwę zmiennej globalnej, która będzie
** przechowywać przekazaną wartość in, GLOBAL.
** Jest to po prostu prefiks połączony z nową liczbą indeksu
**, którą właśnie obliczyliśmy powyżej.
*/
elt_name :=prefix||new_idx;
Kopiuj( the_value , elt_name );
END;
FUNKCJA Pop ( the_stackname VARCHAR2)
RETURN VARCHAR2 JEST
ptr_name VARCHAR2(40); -- Nazwa wskaźnika tego stosu
przedrostek VARCHAR2(40); -- Wspólny przedrostek dla zmiennych pamięci
elt_name VARCHAR2(40); -- Nazwa elementu pamięci
new_idx VARCHAR2(4); -- Nowa wartość wskaźnika stosu
cur_idx VARCHAR2(4); -- Aktualna wartość wskaźnika stosu
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
POCZĄTEK
/*
** Dla dowolnego nazwanego stosu, do którego się odwołujemy, zaczynają się globalne
** zmienne używane do przechowywania wartości stosu i wskaźnik stosu
** ze wspólnym prefiksem:
** GLOBALNY.
*/
prefiks :='GLOBALNY.' || the_stackname;
/*
** Ten nazwany wskaźnik stosu znajduje się w
** GLOBALNYM.
** wskaźnika.
*/
nazwa_ptr :=prefiks || '_PTR';
/*
** Wymusza domyślną wartość NULL, abyśmy mogli sprawdzić, czy wskaźnik
** istnieje (jako zmienna globalna). Jeśli nie
** nie istnieje, możemy za chwilę przetestować NULL i uniknąć
** typowego błędu związanego z odwoływaniem się do nieistniejących
** zmiennych globalnych.
** />*/
Default_Value( NULL, ptr_name );
/*
** Jeśli *wartość* zawarta we wskaźniku ma wartość NULL, to
** wskaźnik nie może istniały przed powyższą instrukcją
** Default_Value. Zwróć stałą
** NO_SUCH_STACK w tym przypadku i usuń globalną
** zmienną utworzoną niejawnie przez Default_Value.
*/
IF Name_In( ptr_name ) IS NULL THEN
the_val :=NO_SUCH_STACK;
Erase( nazwa_ptr );
/*
** W przeciwnym razie nazwany stos już istnieje. Pobierz indeks
** największego elementu stosu ze wskaźnika
** tego stosu.
*/
ELSE
cur_idx :=Name_In( nazwa_ptr );
/*
** Jeśli indeks wynosi zero, to nazwany stos jest już
** pusty, więc zwróć stałą EMPTY_STACK i pozostaw
** wskaźnik stosu na później użyj, tj. nie
** USUWAJ go.
**
** Pamiętaj, że stos może być pusty tylko wtedy, gdy niektóre wartości
** zostały PUSH i następnie wszystkie wartości kolejno
** POP'ed. Jeśli żadne wartości nie zostałyby wciśnięte na ten nazwany
** stos, to żaden powiązany wskaźnik stosu nie zostałby
** utworzony i oznaczylibyśmy ten błąd za pomocą
** NO_SUCH_STACK przypadek powyżej.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Jeśli indeks jest niezerowy, to :
** (1) Określ nazwę zmiennej globalnej, w której
** jest przechowywana wartość do POP,
** GLOBAL.
** (2) Pobierz wartość elementu (cur_idx) do
** return
** (3) Zmniejsz wskaźnik stosu
** (4) Usuń zmienna globalna, która była używana do
** przechowywania wartości
*/
ELSE
elt_name:=prefix || cur_idx;
the_val :=Name_In( elt_name );
new_idx :=TO_CHAR( TO_NUMBER( Name_In(ptr_name) ) - 1 );
Kopiuj( new_idx , ptr_name );
Wymaż ( elt_name );
END IF;
END IF;
RETURN the_val;
END;