Press "Enter" to skip to content

NAME_IN built-in in Oracle D2k Forms

NAME_IN built-in in Oracle D2k Forms

Description
Returns the value of the indicated variable.
The returned value is in the form of a character string. However, you can use NAME_IN to return
numbers and dates as character strings and then convert those strings to the appropriate data types. You
can use the returned value as you would use any value within an executable statement.
If you nest the NAME_IN function, Form Builder evaluates the individual NAME_IN functions from the
innermost one to the outermost one.
Syntax
FUNCTION NAME_IN
(variable_name VARCHAR2);
Built-in Type unrestricted function
Returns VARCHAR2
Enter Query Mode yes
Parameters
variable_name Specifies a valid variable or text item. The data type of the name is
VARCHAR2.
Usage Notes
If the returned value is a date string, NAME_IN will use the format mask specified in the
BUILTIN_DATE_FORMAT property. If the DATE_FORMAT_COMPATIBILITY_MODE property
is set to 4.5 the default American format is used to format the returned string.
NAME_IN examples
/*
** Built-in: NAME_IN
** Example: Simple implementation of a Last-In-First-Out
** stack mechanism using Global variables.
** For each named stack, a global variable
** GLOBAL.<stackname>_PTR points to the largest
** element on the stack. PUSH increments this
** value as new elements are added. Values
** PUSH’ed on or POP’ed off the named stack are
** actually stored in GLOBAL variables of a
** conveniently formed name: GLOBAL.<stackname>nnn
** where ’nnn’ is the number of the element on the
** stack.
**
** Usage:
** Push(’MYSTACKNAME’, ’1’);
** Push(’MYSTACKNAME’, ’2’);
**
** str_var := Pop(’MYSTACKNAME’); — Gets ’2’
** str_var := Pop(’MYSTACKNAME’); — Gets ’1’
** str_var := Pop(’MYSTACKNAME’); — Gets ’EOS’
**
*/
PROCEDURE Push ( the_stackname VARCHAR2,
the_value VARCHAR2 ) IS
ptr_name VARCHAR2(40); — This stack’s pointer name
prefix VARCHAR2(40); — Common prefix for storage vars
elt_name VARCHAR2(40); — Name of storage element
new_idx VARCHAR2(4) ; — New stack pointer value
BEGIN
/*
** For any named stack that we reference, the global
** variables used for storing the stack’s values and the
** stack’s pointer all begin with a common prefix:
** GLOBAL.<stackname>
*/
prefix := ’GLOBAL.’ || the_stackname;
/*
** This named stack’s pointer resides in
** GLOBAL.<stackname>_PTR Remember that this is the *name*
** of the pointer.
*/
ptr_name := prefix || ’_PTR’;
/*
** Initialize the stack pointer with a default value of
** zero if the stack pointer did not exist previously, ie
** the GLOBAL.<stackname>_PTR had yet to be created.
*/
Default_Value( ’0’, ptr_name );
/*
** Since we’re PUSH’ing a new element on the stack,
** increment the stack pointer to reflect this new
** element’s position. Remember that GLOBAL variables are
** always of type VARCHAR2, so we must convert them TO_NUMBER
** before any calculations.
*/
new_idx := TO_CHAR( TO_NUMBER( Name_In( ptr_name ) ) + 1 ) ;
Copy( new_idx , ptr_name );
/*
** Determine the name of the global variable which will
** store the value passed in, GLOBAL.<stackname><new_idx>.
** This is simply the prefix concatenated to the new index
** number we just calculated above.
*/
elt_name := prefix||new_idx;
Copy( the_value , elt_name );
END;
FUNCTION Pop ( the_stackname VARCHAR2)
RETURN VARCHAR2 IS
ptr_name VARCHAR2(40); — This stack’s pointer name
prefix VARCHAR2(40); — Common prefix for storage vars
elt_name VARCHAR2(40); — Name of storage element
new_idx VARCHAR2(4) ; — New stack pointer value
cur_idx VARCHAR2(4) ; — Current stack pointer value
the_val VARCHAR2(255);
EMPTY_STACK CONSTANT VARCHAR2(3) := ’EOS’;
NO_SUCH_STACK CONSTANT VARCHAR2(3) := ’NSS’;
BEGIN
/*
** For any named stack that we reference, the global
** variables used for storing the stack’s values and the
** stack’s pointer all begin with a common prefix:
** GLOBAL.<stackname>
*/
prefix := ’GLOBAL.’ || the_stackname;
/*
** This named stack’s pointer resides in
** GLOBAL.<stackname>_PTR Remember that this is the *name*
** of the pointer.
*/
ptr_name := prefix || ’_PTR’;
/*
** Force a default value of NULL so we can test if the
** pointer exists (as a global variable). If it does not
** exist, we can test in a moment for the NULL, and avoid
** the typical error due to referencing non-existent
** global variables.
*/
Default_Value( NULL, ptr_name );
/*
** If the *value* contained in the pointer is NULL, then
** the pointer must not have existed prior to the
** Default_Value statement above. Return the constant
** NO_SUCH_STACK in this case and erase the global
** variable that the Default_Value implicitly created.
*/
IF Name_In( ptr_name ) IS NULL THEN
the_val := NO_SUCH_STACK;
Erase( ptr_name );
/*
** Otherwise, the named stack already exists. Get the
** index of the largest stack element from this stack’s
** pointer.
*/
ELSE
cur_idx := Name_In( ptr_name ) ;
/*
** If the index is zero, then the named stack is already
** empty, so return the constant EMPTY_STACK, and leave
** the stack’s pointer around for later use, ie don’t
** ERASE it.
**
** Note that a stack can only be empty if some values
** have been PUSH’ed and then all values subsequently
** POP’ed. If no values were ever PUSH’ed on this named
** stack, then no associated stack pointer would have
** been created, and we would flag that error with the
** NO_SUCH_STACK case above.
*/
IF cur_idx = ’0’ THEN
the_val := EMPTY_STACK;
/*
** If the index is non-zero, then:
** (1) Determine the name of the global variable in
** which the value to be POP’ed is stored,
** GLOBAL.<stackname><cur_idx>
** (2) Get the value of the (cur_idx)-th element to
** return
** (3) Decrement the stack pointer
** (4) Erase the global variable which was used for
** value storage
*/
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 );
Erase( elt_name );
END IF;
END IF;
RETURN the_val;
END;