Oracle
 sql >> Database >  >> RDS >> Oracle

NAME_IN integrato in Oracle D2k Forms

NAME_IN integrato in Oracle D2k Forms

Descrizione
Restituisce il valore della variabile indicata.
Il valore restituito è sotto forma di stringa di caratteri. Tuttavia, puoi utilizzare NAME_IN per restituire
numeri e date come stringhe di caratteri e quindi convertire tali stringhe nei tipi di dati appropriati. Puoi
utilizzare il valore restituito come useresti qualsiasi valore all'interno di un'istruzione eseguibile.
Se nidifica la funzione NAME_IN, Form Builder valuta le singole funzioni NAME_IN da quella
più interna a quella più esterna uno.
Sintassi
FUNCTION NAME_IN
(nome_variabile VARCHAR2);
Tipo integrato funzione senza restrizioni
Restituisce VARCHAR2
Entra in modalità query sì
Parametri
nome_variabile Specifica una variabile o un elemento di testo valido. Il tipo di dati del nome è
VARCHAR2.
Note sull'utilizzo
Se il valore restituito è una stringa di data, NAME_IN utilizzerà la maschera di formato specificata nella proprietà
BUILTIN_DATE_FORMAT. Se la proprietà DATE_FORMAT_COMPATIBILITY_MODE
è impostata su 4.5, per formattare la stringa restituita viene utilizzato il formato americano predefinito.
Esempi NAME_IN
/*
** Integrato:NAME_IN
** Esempio:semplice implementazione di un meccanismo di stack Last-In-First-Out
** che utilizza variabili globali.
** Per ogni stack denominato, una variabile globale
** GLOBAL._PTR punta all'elemento
** più grande dello stack. PUSH incrementa questo
** valore man mano che vengono aggiunti nuovi elementi. I valori
** PUSH'ed on o POP'ed off the named stack sono
** effettivamente memorizzati nelle variabili GLOBAL di un
** nome convenientemente formato:GLOBAL.nnn
** dove 'nnn' è il numero dell'elemento nello stack
**.
**
** Utilizzo:
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Ottiene '2'
** str_var :=Pop('MYSTACKNAME'); -- Ottiene '1'
** str_var :=Pop('MYSTACKNAME'); -- Ottiene 'EOS'
**
*/
PROCEDURE Push ( the_stackname VARCHAR2,
the_value VARCHAR2 ) IS
ptr_name VARCHAR2(40); -- Il nome del puntatore di questo stack
prefisso VARCHAR2(40); -- Prefisso comune per l'archiviazione vars
elt_name VARCHAR2(40); -- Nome dell'elemento di archiviazione
new_idx VARCHAR2(4); -- Nuovo valore del puntatore dello stack
BEGIN
/*
** Per ogni stack denominato a cui facciamo riferimento, le variabili globali
** utilizzate per memorizzare i valori dello stack e il
** I puntatori dello stack iniziano tutti con un prefisso comune:
** GLOBAL.
*/
prefix :='GLOBAL.' || the_stackname;
/*
** Il puntatore di questo stack denominato risiede in
** GLOBAL._PTR Ricorda che questo è il *nome*
** del puntatore.
*/
ptr_name :=prefisso || '_PTR';
/*
** Inizializza il puntatore dello stack con un valore predefinito di
** zero se il puntatore dello stack non esisteva in precedenza, ovvero
** il GLOBAL ._PTR doveva ancora essere creato.
*/
Default_Value( '0', ptr_name );
/*
** Dato che stiamo spingendo un nuovo elemento nello stack,
** incrementa il puntatore dello stack per riflettere la posizione di questo nuovo
** elemento. Ricorda che le variabili GLOBAL sono
** sempre di tipo VARCHAR2, quindi dobbiamo convertirle in TO_NUMBER
** prima di qualsiasi calcolo.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Determina il nome della variabile globale che
** memorizzerà il valore passato in, GLOBAL..
** Questo è semplicemente il prefisso concatenato al nuovo indice
** numero appena calcolato sopra.
*/
elt_name :=prefix||new_idx;
Copy( the_value , elt_name );
END;
FUNCTION Pop ( the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2(40); -- Il nome del puntatore di questo stack
prefisso VARCHAR2(40); -- Prefisso comune per l'archiviazione vars
elt_name VARCHAR2(40); -- Nome dell'elemento di archiviazione
new_idx VARCHAR2(4); -- Nuovo valore del puntatore dello stack
cur_idx VARCHAR2(4); -- Valore del puntatore dello stack corrente
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** Per ogni stack denominato a cui facciamo riferimento, le variabili globali
** utilizzate per memorizzare i valori dello stack e il puntatore dello stack
** iniziano tutti con un prefisso comune:
** GLOBAL.
*/
prefisso :='GLOBAL.' || the_stackname;
/*
** Il puntatore di questo stack denominato risiede in
** GLOBAL._PTR Ricorda che questo è il *nome*
** del puntatore.
*/
ptr_name :=prefisso || '_PTR';
/*
** Forza un valore predefinito di NULL in modo da poter verificare se il puntatore
** esiste (come variabile globale). Se non
** esiste, possiamo testare in un attimo il valore NULL ed evitare
** il tipico errore dovuto al riferimento a variabili globali inesistenti
**.
** />*/
Default_Value( NULL, ptr_name );
/*
** Se il *valore* contenuto nel puntatore è NULL, allora
** il puntatore non deve sono esistite prima dell'istruzione
** Default_Value sopra. Restituisce la costante
** NO_SUCH_STACK in questo caso e cancella la variabile globale
** creata implicitamente da Default_Value.
*/
IF Name_In( ptr_name ) IS NULL THEN
/>the_val :=NO_SUCH_STACK;
Cancella( ptr_name );
/*
** Altrimenti, lo stack indicato esiste già. Ottieni l'indice
** dell'elemento dello stack più grande dal puntatore
** di questo stack.
*/
ELSE
cur_idx :=Name_In( ptr_name );
/*
** Se l'indice è zero, lo stack denominato è già
** vuoto, quindi restituisci la costante EMPTY_STACK e lascia
** il puntatore dello stack in giro per dopo utilizzare, ovvero non
** ERASE esso.
**
** Nota che uno stack può essere vuoto solo se alcuni valori
** sono stati PUSH'ed e quindi tutti i valori successivamente
** POP'ed. Se nessun valore fosse mai stato inserito tramite PUSH in questo stack denominato
**, allora non sarebbe stato creato alcun puntatore allo stack associato
** e contrassegneremmo quell'errore con
** NO_SUCH_STACK caso precedente.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Se l'indice è diverso da zero, allora :
** (1) Determina il nome della variabile globale in
** in cui è memorizzato il valore da inserire nel POP,
** GLOBAL.
** (2) Ottieni il valore dell'elemento (cur_idx)-esimo in
** return
** (3) Decrementa il puntatore dello stack
** (4) Cancella la variabile globale utilizzata per
** memorizzazione del valore
*/
ELSE
elt_name:=prefisso || cur_idx;
the_val :=Name_In( elt_name );
new_idx :=TO_CHAR( TO_NUMBER( Name_In(ptr_name) ) - 1 );
Copy( new_idx , ptr_name );
Cancella ( elt_name );
END IF;
END IF;
RETURN the_val;
END;