sql >> Base de Datos >  >> RDS >> Oracle

NAME_IN integrado en Oracle D2k Forms

NAME_IN integrado en Oracle D2k Forms

Descripción
Devuelve el valor de la variable indicada.
El valor devuelto tiene la forma de una cadena de caracteres. Sin embargo, puede usar NAME_IN para devolver
números y fechas como cadenas de caracteres y luego convertir esas cadenas a los tipos de datos apropiados. Usted
puede usar el valor devuelto como usaría cualquier valor dentro de una instrucción ejecutable.
Si anida la función NAME_IN, Form Builder evalúa las funciones individuales de NAME_IN desde la
más interna hasta la más externa uno.
Sintaxis
NOMBRE DE LA FUNCIÓN_IN
(nombre_variable VARCHAR2);
Función sin restricciones de tipo integrado
Devuelve VARCHAR2
Entrar modo de consulta sí
Parámetros
nombre_variable Especifica una variable válida o elemento de texto. El tipo de datos del nombre es
VARCHAR2.
Notas de uso
Si el valor devuelto es una cadena de fecha, NAME_IN utilizará la máscara de formato especificada en la propiedad
BUILTIN_DATE_FORMAT. Si la propiedad DATE_FORMAT_COMPATIBILITY_MODE
está configurada en 4.5, se usa el formato estadounidense predeterminado para formatear la cadena devuelta.
Ejemplos de NAME_IN
/*
** Integrado:NAME_IN
** Ejemplo:Implementación simple de un mecanismo de pila Last-In-First-Out
** usando variables globales.
** Para cada pila con nombre, una variable global
** GLOBAL._PTR apunta al elemento
** más grande de la pila. PUSH incrementa este
** valor a medida que se agregan nuevos elementos. Los valores
** PUSH'ed on o POP'ed out de la pila nombrada son
** realmente almacenados en variables GLOBAL de un
** nombre convenientemente formado:GLOBAL.nnn
** donde 'nnn' es el número del elemento en la
** pila.
**
** Uso:
** Push('MYSTACKNAME' , '1');
** Push('MYSTACKNAME', '2');
**
** str_var :=Pop('MYSTACKNAME'); -- Obtiene ’2’
** str_var :=Pop(’MYSTACKNAME’); -- Obtiene ’1’
** str_var :=Pop(’MYSTACKNAME’); -- Obtiene ’EOS’
**
*/
PROCEDIMIENTO Push ( the_stackname VARCHAR2,
the_value VARCHAR2 ) IS
ptr_name VARCHAR2(40); -- El nombre del puntero de esta pila
prefijo VARCHAR2(40); -- Prefijo común para variables de almacenamiento
elt_name VARCHAR2(40); -- Nombre del elemento de almacenamiento
new_idx VARCHAR2(4); -- Nuevo valor de puntero de pila
BEGIN
/*
** Para cualquier pila con nombre a la que hagamos referencia, las variables globales
** utilizadas para almacenar los valores de la pila y el
** todos los punteros de la pila comienzan con un prefijo común:
** GLOBAL.
*/
prefix :='GLOBAL.' || the_stackname;
/*
** Este puntero de pila con nombre reside en
** GLOBAL._PTR Recuerde que este es el *nombre*
** del puntero.
*/
ptr_name :=prefijo || '_PTR';
/*
** Inicialice el puntero de pila con un valor predeterminado de
** cero si el puntero de pila no existía anteriormente, es decir,
** el GLOBAL ._PTR aún no se había creado.
*/
Default_Value( '0', ptr_name );
/*
** Dado que estamos PUSH'ing a nuevo elemento en la pila,
** incrementa el puntero de la pila para reflejar la posición de este nuevo
** elemento. Recuerde que las variables GLOBALES son
** siempre del tipo VARCHAR2, por lo que debemos convertirlas A_NUMBER
** antes de cualquier cálculo.
*/
new_idx :=TO_CHAR( TO_NUMBER( Name_In ( ptr_name ) ) + 1 );
Copy( new_idx , ptr_name );
/*
** Determine el nombre de la variable global que
** almacenará el valor pasado en, GLOBAL..
** Este es simplemente el prefijo concatenado al nuevo índice
** número que acabamos de calcular arriba.
*/
elt_name :=prefijo||nuevo_idx;
Copiar( el_valor , elt_name );
FIN;
FUNCIÓN Pop (el_nombre_pila VARCHAR2)
RETORNO VARCHAR2 ES
ptr_nombre VARCHAR2(40); -- El nombre del puntero de esta pila
prefijo VARCHAR2(40); -- Prefijo común para variables de almacenamiento
elt_name VARCHAR2(40); -- Nombre del elemento de almacenamiento
new_idx VARCHAR2(4); -- Nuevo valor de puntero de pila
cur_idx VARCHAR2(4); -- Valor actual del puntero de la pila
the_val VARCHAR2(255);
VARCHAR2(3) CONSTANTE_PILA_VACÍA:='EOS';
NO_SUCH_STACK CONSTANT VARCHAR2(3) :='NSS';
BEGIN
/*
** Para cualquier pila con nombre a la que hagamos referencia, las variables globales
** utilizadas para almacenar los valores de la pila y el puntero de la pila
** comienzan todas con un prefijo común:
** GLOBAL.
*/
prefijo :='GLOBAL.' || the_stackname;
/*
** Este puntero de pila con nombre reside en
** GLOBAL._PTR Recuerde que este es el *nombre*
** del puntero.
*/
ptr_name :=prefijo || ’_PTR’;
/*
** Forzar un valor predeterminado de NULL para que podamos probar si el
** puntero existe (como una variable global). Si no
** existe, podemos probar en un momento el NULL y evitar
** el típico error por referenciar variables globales
** inexistentes.
*/
Default_Value( NULL, ptr_name );
/*
** Si el *valor* contenido en el puntero es NULL, entonces
** el puntero no debe han existido antes de la declaración
** Default_Value anterior. Devuelva la constante
** NO_SUCH_STACK en este caso y borre la variable global
** que el Default_Value creó implícitamente.
*/
IF Name_In(ptr_name) IS NULL THEN
the_val :=NO_SUCH_STACK;
Erase( ptr_name );
/*
** De lo contrario, la pila nombrada ya existe. Obtenga el índice
** del elemento de pila más grande del puntero
** de esta pila.
*/
ELSE
cur_idx :=Name_In( ptr_name );
/*
** Si el índice es cero, entonces la pila nombrada ya está
** vacía, así que devuelva la constante EMPTY_STACK y deje
** el puntero de la pila para más adelante usar, es decir, no
** BORRARLO.
**
** Tenga en cuenta que una pila solo puede estar vacía si algunos valores
** se han presionado y luego todos los valores subsecuentemente
** POP'ed. Si nunca se presionaron valores en esta pila
** nombrada, entonces no se habría creado ningún puntero de pila asociado
**, y marcaríamos ese error con
** NO_SUCH_STACK caso anterior.
*/
IF cur_idx ='0' THEN
the_val :=EMPTY_STACK;
/*
** Si el índice no es cero, entonces :
** (1) Determine el nombre de la variable global en
** donde se almacena el valor que se va a enviar mediante POP,
** GLOBAL.
** (2) Obtener el valor del (cur_idx)-ésimo elemento para
** volver
** (3) Disminuir el puntero de pila
** (4) Borrar la variable global que se utilizó para
** almacenamiento de valor
*/
ELSE
elt_name:=prefijo || cur_idx;
the_val :=Name_In( elt_name );
new_idx :=TO_CHAR( TO_NUMBER( Name_In(ptr_name) ) - 1 );
Copiar( new_idx , ptr_name );
Borrar ( elt_name );
END IF;
END IF;
RETURN the_val;
END;