Oracle
 sql >> Datenbank >  >> RDS >> Oracle

NAME_IN ist in Oracle D2k Forms integriert

NAME_IN integriert in Oracle D2k Forms

Beschreibung
Gibt den Wert der angegebenen Variable zurück.
Der zurückgegebene Wert hat die Form einer Zeichenkette. Sie können jedoch NAME_IN verwenden, um
Zahlen und Datumsangaben als Zeichenfolgen zurückzugeben und diese Zeichenfolgen dann in die entsprechenden Datentypen umzuwandeln. Sie
können den zurückgegebenen Wert wie jeden anderen Wert innerhalb einer ausführbaren Anweisung verwenden.
Wenn Sie die NAME_IN-Funktion verschachteln, wertet Form Builder die einzelnen NAME_IN-Funktionen von der
innersten bis zur äußersten aus one.
Syntax
FUNCTION NAME_IN
(Variablenname VARCHAR2);
Integrierter Typ, uneingeschränkte Funktion
Gibt VARCHAR2 zurück
Abfragemodus aufrufen ja
Parameter
Variablenname Spezifiziert eine gültige Variable oder ein gültiges Textelement. Der Datentyp des Namens ist
VARCHAR2.
Hinweise zur Verwendung
Wenn der zurückgegebene Wert eine Datumszeichenfolge ist, verwendet NAME_IN die in der Eigenschaft
BUILTIN_DATE_FORMAT angegebene Formatmaske. Wenn die Eigenschaft DATE_FORMAT_COMPATIBILITY_MODE
auf 4.5 gesetzt ist, wird das amerikanische Standardformat verwendet, um die zurückgegebene Zeichenfolge zu formatieren.
Beispiele für NAME_IN
/*
** Eingebaut:NAME_IN
** Beispiel:Einfache Implementierung eines Last-In-First-Out
** Stack-Mechanismus mit globalen Variablen.
** Für jeden benannten Stapel zeigt eine globale Variable
** GLOBAL._PTR auf das größte
** Element auf dem Stapel. PUSH erhöht diesen
** Wert, wenn neue Elemente hinzugefügt werden. Werte, die
** auf den benannten Stack gepusht oder per POP entfernt werden, werden
** tatsächlich in GLOBAL-Variablen mit einem
** bequem geformten Namen gespeichert:GLOBAL.nnn
** wobei 'nnn' die Nummer des Elements auf dem
** Stapel ist.
**
** Verwendung:
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Erhält ’2’
** str_var :=Pop(’MYSTACKNAME’); -- Erhält ’1’
** str_var :=Pop(’MYSTACKNAME’); -- Erhält ’EOS’
**
*/
PROCEDURE Push ( the_stackname VARCHAR2,
the_value VARCHAR2 ) IS
ptr_name VARCHAR2(40); -- Der Zeigername dieses Stacks
Präfix VARCHAR2(40); -- Allgemeines Präfix für Speichervariablen
elt_name VARCHAR2(40); -- Name des Speicherelements
new_idx VARCHAR2(4); -- Neuer Stapelzeigerwert
BEGIN
/*
** Für jeden benannten Stapel, auf den wir verweisen, werden die globalen
** Variablen, die zum Speichern der Werte des Stapels verwendet werden, und die
** Stack-Zeiger beginnen alle mit einem gemeinsamen Präfix:
** GLOBAL.
*/
Präfix :='GLOBAL.' || the_stackname;
/*
** Der Zeiger dieses benannten Stacks befindet sich in
** GLOBAL._PTR Denken Sie daran, dass dies der *Name*
** des Zeigers ist.
*/
ptr_name :=Präfix || '_PTR';
/*
** Initialisiert den Stapelzeiger mit einem Standardwert von
** Null, wenn der Stapelzeiger vorher nicht existierte, dh
** der GLOBAL ._PTR musste noch erstellt werden.
*/
Default_Value( '0', ptr_name );
/*
** Da wir ein PUSH machen neues Element auf dem Stapel,
** erhöhen Sie den Stapelzeiger, um die Position dieses neuen
** Elements widerzuspiegeln. Denken Sie daran, dass GLOBAL-Variablen
** immer vom Typ VARCHAR2 sind, daher müssen wir sie vor Berechnungen in TO_NUMBER
** umwandeln.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Bestimme den Namen der globalen Variable, die
** den übergebenen Wert speichert in, GLOBAL..
** Dies ist einfach das Präfix, das mit der neuen Indexnummer verknüpft ist,
** die wir gerade oben berechnet haben.
*/
elt_name :=prefix||new_idx;
Copy( the_value , elt_name );
END;
FUNCTION Pop ( the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2(40); -- Der Zeigername dieses Stacks
Präfix VARCHAR2(40); -- Allgemeines Präfix für Speichervariablen
elt_name VARCHAR2(40); -- Name des Speicherelements
new_idx VARCHAR2(4); -- Neuer Stapelzeigerwert
cur_idx VARCHAR2(4); -- Aktueller Stapelzeigerwert
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** Für jeden benannten Stapel, auf den wir verweisen, beginnen die globalen
** Variablen, die zum Speichern der Werte des Stapels verwendet werden, und der Zeiger des
** Stapels mit einem gemeinsamen Präfix:
** GLOBAL.
*/
prefix :='GLOBAL.' || the_stackname;
/*
** Der Zeiger dieses benannten Stacks befindet sich in
** GLOBAL._PTR Denken Sie daran, dass dies der *Name*
** des Zeigers ist.
*/
ptr_name :=Präfix || ’_PTR’;
/*
** Erzwingt einen Standardwert von NULL, damit wir testen können, ob der
** Zeiger existiert (als globale Variable). Wenn es nicht
** existiert, können wir gleich auf NULL testen und
** den typischen Fehler vermeiden, der auf die Referenzierung nicht vorhandener
** globaler Variablen zurückzuführen ist.
** />*/
Default_Value( NULL, ptr_name );
/*
** Wenn der im Pointer enthaltene *Wert* NULL ist, dann
** darf der Pointer nicht vor der obigen Anweisung
** Default_Value existiert haben. Geben Sie in diesem Fall die Konstante
** NO_SUCH_STACK zurück und löschen Sie die globale
** Variable, die der Default_Value implizit erstellt hat.
*/
IF Name_In( ptr_name ) IS NULL THEN
the_val :=NO_SUCH_STACK;
Erase( ptr_name );
/*
** Andernfalls existiert der genannte Stack bereits. Holen Sie sich den
** Index des größten Stapelelements aus dem
** Zeiger dieses Stapels.
*/
ELSE
cur_idx :=Name_In( ptr_name );
/*
** Wenn der Index Null ist, dann ist der benannte Stack bereits
** leer, geben Sie also die Konstante EMPTY_STACK zurück und lassen Sie
** den Zeiger des Stacks für später stehen verwenden, dh nicht
** LÖSCHEN.
**
** Beachten Sie, dass ein Stack nur leer sein kann, wenn einige Werte
** gepusht wurden und dann alle Werte nacheinander
** POP'ed. Wenn niemals Werte auf diesen benannten
** Stack gepusht wurden, dann wäre kein zugeordneter Stack-Zeiger
** erstellt worden, und wir würden diesen Fehler mit dem
** NO_SUCH_STACK markieren Fall oben.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Wenn der Index nicht Null ist, dann :
** (1) Ermitteln Sie den Namen der globalen Variable, in der
** der zu POP-fähige Wert gespeichert ist,
** GLOBAL.
** (2) Hole den Wert des (cur_idx)-ten Elements nach
** return
** (3) Dekrementiere den Stapelzeiger
** (4) Erase die globale Variable, die für
** Wertspeicherung
*/
ELSE
elt_name:=prefix || verwendet wurde 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;