NAME_IN ingebouwd in Oracle D2k Forms
Beschrijving
Retourneert de waarde van de aangegeven variabele.
De geretourneerde waarde heeft de vorm van een tekenreeks. U kunt echter NAME_IN gebruiken om
getallen en datums als tekenreeksen te retourneren en die reeksen vervolgens naar de juiste gegevenstypen te converteren. U
kunt de geretourneerde waarde gebruiken zoals u elke waarde in een uitvoerbare instructie zou gebruiken.
Als u de functie NAME_IN nest, evalueert Form Builder de individuele NAME_IN-functies van de
binnenste naar de buitenste één.
Syntaxis
FUNCTION NAME_IN
(variable_name VARCHAR2);
Ingebouwde type onbeperkte functie
Retourneert VARCHAR2
Ga naar de querymodus ja
Parameters
variabele_name Specificeert een geldige variabele of tekstitem. Het gegevenstype van de naam is
VARCHAR2.
Gebruiksopmerkingen
Als de geretourneerde waarde een datumtekenreeks is, gebruikt NAME_IN het formaatmasker dat is opgegeven in de eigenschap
BUILTIN_DATE_FORMAT. Als de eigenschap DATE_FORMAT_COMPATIBILITY_MODE
is ingesteld op 4,5, wordt de standaard Amerikaanse indeling gebruikt om de geretourneerde tekenreeks op te maken.
voorbeelden NAME_IN
/*
** Ingebouwd:NAME_IN
** Voorbeeld:eenvoudige implementatie van een Last-In-First-Out
**-stackmechanisme met behulp van globale variabelen.
** Voor elke benoemde stack wijst een globale variabele
** GLOBAL.
** element op de stack. PUSH verhoogt deze
** waarde als nieuwe elementen worden toegevoegd. Waarden
** geduwd op of POP'ed uit de benoemde stapel zijn
** feitelijk opgeslagen in GLOBAL-variabelen van een
** handig gevormde naam:GLOBAL.
** waarbij 'nnn' het nummer is van het element op de
** stapel.
**
** Gebruik:
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Krijgt ’2’
** str_var :=Pop(’MYSTACKNAME’); -- Krijgt ’1’
** str_var :=Pop(’MYSTACKNAME’); -- Krijgt ’EOS’
**
*/
PROCEDURE Push ( the_stackname VARCHAR2,
the_value VARCHAR2 ) IS
ptr_name VARCHAR2(40); -- De pointernaam van deze stack
prefix VARCHAR2(40); -- Algemeen voorvoegsel voor opslag-vars
elt_name VARCHAR2(40); -- Naam van opslagelement
new_idx VARCHAR2(4); -- Nieuwe stackpointerwaarde
BEGIN
/*
** Voor elke benoemde stack waarnaar we verwijzen, de globale
** variabelen die worden gebruikt voor het opslaan van de stackwaarden en de
** de aanwijzer van de stapel begint allemaal met een algemeen voorvoegsel:
** GLOBAL.
*/
voorvoegsel :='GLOBAL.' || the_stackname;
/*
** De pointer van deze benoemde stack bevindt zich in
** GLOBAL.
** van de pointer is.
*/
ptr_name :=prefix || '_PTR';
/*
** Initialiseer de stapelaanwijzer met een standaardwaarde van
** nul als de stapelaanwijzer niet eerder bestond, dwz
** de GLOBALE .
*/
Default_Value( '0', ptr_name );
/*
** Aangezien we een nieuw element op de stapel,
** verhoog de stapelaanwijzer om de positie van dit nieuwe
** element weer te geven. Onthoud dat GLOBAL-variabelen
** altijd van het type VARCHAR2 zijn, dus we moeten ze TO_NUMBER
** converteren voor berekeningen.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Bepaal de naam van de globale variabele die
** de doorgegeven waarde zal opslaan in, GLOBAL.
** Dit is gewoon het voorvoegsel dat is samengevoegd met het nieuwe indexnummer
** dat we zojuist hierboven hebben berekend.
*/
elt_name :=prefix||new_idx;
Copy( the_value , elt_name );
END;
FUNCTION Pop ( the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2(40); -- De pointernaam van deze stack
prefix VARCHAR2(40); -- Algemeen voorvoegsel voor opslag-vars
elt_name VARCHAR2(40); -- Naam van opslagelement
new_idx VARCHAR2(4); -- Nieuwe stackpointerwaarde
cur_idx VARCHAR2(4); -- Huidige stackpointerwaarde
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** Voor elke benoemde stapel waarnaar we verwijzen, beginnen de globale
**-variabelen die worden gebruikt voor het opslaan van de waarden van de stapel en de
**-aanwijzer van de stapel allemaal met een algemeen voorvoegsel:
** GLOBAL.
*/
voorvoegsel :='GLOBAL.' || the_stackname;
/*
** De pointer van deze benoemde stack bevindt zich in
** GLOBAL.
** van de pointer is.
*/
ptr_name :=prefix || ’_PTR’;
/*
** Forceer een standaardwaarde van NULL zodat we kunnen testen of de
**-aanwijzer bestaat (als een globale variabele). Als het niet
** bestaat, kunnen we zo meteen testen op de NULL, en
** de typische fout vermijden als gevolg van het verwijzen naar niet-bestaande
** globale variabelen.
*/
Default_Value( NULL, ptr_name );
/*
** Als de *waarde* in de aanwijzer NULL is, dan
** mag de aanwijzer niet bestonden al vóór de
** Default_Value-instructie hierboven. Retourneer in dit geval de constante
** NO_SUCH_STACK en wis de globale
** variabele die de Default_Value impliciet heeft gemaakt.
*/
IF Name_In( ptr_name ) IS NULL THEN
the_val :=NO_SUCH_STACK;
Wissen( ptr_name );
/*
** Anders bestaat de genoemde stapel al. Haal de
** index van het grootste stack-element uit de
** pointer van deze stack.
*/
ELSE
cur_idx :=Name_In( ptr_name );
/*
** Als de index nul is, is de benoemde stapel al
** leeg, dus retourneer de constante EMPTY_STACK, en laat
** de aanwijzer van de stapel rond voor later gebruik, dwz niet
** ERASE it.
**
** Merk op dat een stapel alleen leeg kan zijn als sommige waarden
** zijn geduwd en dan alle waarden vervolgens
** POP'ed. Als er nooit waarden op deze benoemde
**-stack zijn geduwd, zou er geen gekoppelde stack-pointer zijn
** gemaakt, en we zouden die fout markeren met de
** NO_SUCH_STACK geval hierboven.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Als de index niet nul is, dan :
** (1) Bepaal de naam van de globale variabele in
** waarin de te POP'en waarde wordt opgeslagen,
** GLOBAL.
** (2) Haal de waarde van het (cur_idx)-th element naar
** return
** (3) Verlaag de stackpointer
** (4) Wissen de globale variabele die werd gebruikt voor
** waardeopslag
*/
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 );
Wissen ( elt_name );
END IF;
END IF;
RETURN the_val;
END;