Oracle
 sql >> Base de données >  >> RDS >> Oracle

NAME_IN intégré dans Oracle D2k Forms

NAME_IN intégré dans Oracle D2k Forms

Description
Renvoie la valeur de la variable indiquée.
La valeur renvoyée est sous la forme d'une chaîne de caractères. Cependant, vous pouvez utiliser NAME_IN pour renvoyer
des nombres et des dates sous forme de chaînes de caractères, puis convertir ces chaînes dans les types de données appropriés. Vous
pouvez utiliser la valeur renvoyée comme vous utiliseriez n'importe quelle valeur dans une instruction exécutable.
Si vous imbriquez la fonction NAME_IN, Form Builder évalue les fonctions NAME_IN individuelles de
la plus interne à la plus externe un.
Syntaxe
FUNCTION NAME_IN
(nom_variable VARCHAR2);
Fonction de type intégré sans restriction
Renvoie VARCHAR2
Entrer en mode requête oui
Paramètres
nom_variable Spécifie une variable ou un élément de texte valide. Le type de données du nom est
VARCHAR2.
Notes d'utilisation
Si la valeur renvoyée est une chaîne de date, NAME_IN utilisera le masque de format spécifié dans la propriété
BUILTIN_DATE_FORMAT. Si la propriété DATE_FORMAT_COMPATIBILITY_MODE
est définie sur 4.5, le format américain par défaut est utilisé pour formater la chaîne renvoyée.
Exemples NAME_IN
/*
** Intégré :NAME_IN
** Exemple :implémentation simple d'un mécanisme de pile Last-In-First-Out
** à l'aide de variables globales.
** Pour chaque pile nommée, une variable globale
** GLOBAL._PTR pointe vers le plus grand
** élément de la pile. PUSH incrémente cette
** valeur au fur et à mesure que de nouveaux éléments sont ajoutés. Les valeurs
** PUSH'ed sur ou POP'ed hors de la pile nommée sont
** en fait stockées dans des variables GLOBAL d'un
** nom formé de manière pratique :GLOBAL.nnn
** où 'nnn' est le numéro de l'élément sur la
** pile.
**
** Utilisation :
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Obtient '2'
** str_var :=Pop('MYSTACKNAME'); -- Obtient '1'
** str_var :=Pop('MYSTACKNAME'); -- Obtient 'EOS'
**
*/
PROCEDURE Push ( the_stackname VARCHAR2,
the_value VARCHAR2 ) IS
ptr_name VARCHAR2(40); -- Le nom du pointeur de cette pile
préfixe VARCHAR2(40); -- Préfixe commun pour les variables de stockage
elt_name VARCHAR2(40); -- Nom de l'élément de stockage
new_idx VARCHAR2(4); -- Nouvelle valeur du pointeur de pile
BEGIN
/*
** Pour toute pile nommée à laquelle nous faisons référence, les
** variables globales utilisées pour stocker les valeurs de la pile et les
/>** Les pointeurs de la pile commencent tous par un préfixe commun :
** GLOBAL.
*/
prefix :='GLOBAL.' || the_stackname;
/*
** Le pointeur de cette pile nommée réside dans
** GLOBAL._PTR N'oubliez pas qu'il s'agit du *nom*
** du pointeur.
*/
nom_ptr :=préfixe || '_PTR';
/*
** Initialise le pointeur de pile avec une valeur par défaut de
** zéro si le pointeur de pile n'existait pas auparavant, c'est-à-dire
** le GLOBAL ._PTR n'avait pas encore été créé.
*/
Default_Value( '0', ptr_name );
/*
** Puisque nous poussons un nouvel élément sur la pile,
** incrémente le pointeur de pile pour refléter la position de ce nouvel
** élément. N'oubliez pas que les variables GLOBAL sont
** toujours de type VARCHAR2, nous devons donc les convertir en TO_NUMBER
** avant tout calcul.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Détermine le nom de la variable globale qui
** stockera la valeur transmise dans, GLOBAL..
** Il s'agit simplement du préfixe concaténé au nouvel index
** que nous venons de calculer ci-dessus.
*/
elt_name :=prefix||new_idx;
Copy( the_value , elt_name );
END;
FUNCTION Pop ( the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2(40); -- Le nom du pointeur de cette pile
préfixe VARCHAR2(40); -- Préfixe commun pour les variables de stockage
elt_name VARCHAR2(40); -- Nom de l'élément de stockage
new_idx VARCHAR2(4); -- Nouvelle valeur du pointeur de pile
cur_idx VARCHAR2(4); -- Valeur actuelle du pointeur de pile
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) :='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** Pour toute pile nommée à laquelle nous faisons référence, les
** variables globales utilisées pour stocker les valeurs de la pile et le
** pointeur de la pile commencent tous avec un préfixe commun :
** GLOBAL.
*/
prefix :='GLOBAL.' || the_stackname;
/*
** Le pointeur de cette pile nommée réside dans
** GLOBAL._PTR N'oubliez pas qu'il s'agit du *nom*
** du pointeur.
*/
nom_ptr :=préfixe || '_PTR';
/*
** Force une valeur par défaut de NULL afin que nous puissions tester si le
** pointeur existe (en tant que variable globale). S'il n'existe pas
**, nous pouvons tester dans un instant la valeur NULL et éviter
** l'erreur typique due au référencement de
** variables globales inexistantes.
*/
Default_Value( NULL, ptr_name );
/*
** Si la *valeur* contenue dans le pointeur est NULL, alors
** le pointeur ne doit pas existaient avant l'
** instruction Default_Value ci-dessus. Renvoyez la constante
** NO_SUCH_STACK dans ce cas et effacez la variable
** globale que Default_Value a créée implicitement.
*/
IF Name_In( ptr_name ) IS NULL THEN
/>the_val :=NO_SUCH_STACK;
Erase( ptr_name );
/*
** Sinon, la pile nommée existe déjà. Récupère l'index
** du plus grand élément de pile à partir du
** pointeur de cette pile.
*/
ELSE
cur_idx :=Name_In( ptr_name );
/*
** Si l'index est zéro, alors la pile nommée est déjà
** vide, donc renvoyez la constante EMPTY_STACK, et laissez
** le pointeur de la pile pour plus tard utiliser, c'est-à-dire ne pas
** l'EFFACER.
**
** Notez qu'une pile ne peut être vide que si certaines valeurs
** ont été PUSH'ed et puis toutes les valeurs par la suite
** POP'ed. Si aucune valeur n'a jamais été PUSH'ed sur cette
** pile nommée, alors aucun pointeur de pile associé n'aurait
** été créé, et nous signalerions cette erreur avec le
** NO_SUCH_STACK cas ci-dessus.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Si l'index est différent de zéro, alors :
** (1) Déterminer le nom de la variable globale dans
** dans laquelle la valeur à POP'er est stockée,
** GLOBAL.
** (2) Récupère la valeur du (cur_idx)-ième élément pour
** revenir
** (3) Décrémenter le pointeur de pile
** (4) Effacer la variable globale qui a été utilisée pour
** le stockage de la valeur
*/
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 );
Effacer ( elt_name );
END IF;
END IF;
RETURN the_val;
END;