home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a525 / 16.ddi / README.TXT < prev   
Encoding:
Text File  |  1993-02-03  |  31.0 KB  |  709 lines

  1. This is the SQL*Forms 3.0.16.11.3 release.
  2. (Linked with PL/SQL 1.0.35.1.0)
  3.  
  4. This version was primarily created as a synchronized-release version, but
  5. also includes the bug fixes noted below in section "BUGS FIXED IN 3.0.16".
  6.  
  7. Additionally, bugs 91978, 123888, 124022, 124749, 129519, 131235, 132999,
  8. 134900, 135121, 135239, 135983, 137235, 138310  have been fixed in this
  9. version of SQL*Forms.
  10.  
  11. Bugs outstanding: 115687, 127098, 129342, 138247, 138491.
  12.  
  13.          +------------------------------------------------------+
  14.          | CAUTION:                                             |
  15.          | Installation of this patch on an OS/2 system with a  |
  16.          | local ORACLE database requires that the database     |
  17.          | and Required Support Files be updated to 6.0.36.1.0  |
  18.          | BEFORE this patch can be applied!  Failure to do so  |
  19.          | may result in making the RDBMS inoperable!           |
  20.          |                                                      |
  21.          | Installation of this patch on a client-only system   |
  22.          | (no local database) requires that Required Support   |
  23.          | Files (16-bit) 6.0.36.1.0 be installed on the client |
  24.          | system BEFORE this patch can be applied!             |                               |
  25.          +------------------------------------------------------+
  26.  
  27. Attached below is the standard README text file which discusses bug fixes and
  28. functionality changes.  This text file is a cumulative file for all 3.0.16
  29. versions of SQL*Forms.
  30. --------------------------------------------------------------------------------
  31.  
  32. Release Bulletin
  33. SQL*Forms Version 3.0.16 (Production)
  34. April 13, 1992
  35.  
  36. This bulletin contains important information about this release of SQL*Forms.
  37. It is recommended that you familiarize yourself with the contents of this
  38. bulletin before attempting to use this version.  The bulletin includes function
  39. key mappings for this release for VT100 and VT220 terminals.
  40.  
  41.  
  42. New Features since Versions 2.0 and 2.3
  43. =======================================
  44. A complete list of new and changed features can be found in Appendix A of the
  45. SQL*Forms Designer's Reference Version 3.0.  Major new features include:
  46.  
  47. o   Enhanced User Interface Portability
  48.  
  49. o   The SQL*Forms (Design) interface is completely revised and includes:
  50.     o   Streamlined Menu structure with pull-down menus
  51.     o   Ability to reference and copy application objects such as triggers
  52.     o   Ability to enforce referential integrity constraints
  53.     o   Context-sensitive online help
  54.     o   Enhanced Debug Mode
  55.     o   Integrated text editor
  56.     o   Automatic master-detail block coordination
  57.  
  58. o   PL/SQL Integration
  59.  
  60. o   Ability to integrate pull-down menus built with SQL*Menu
  61.  
  62. o   Enhanced SQL*Forms (Run Form) Capabilities:
  63.     o   Pop-up Pages, List-of-Values, and Field Editor
  64.     o   Format masks for formatting field contents
  65.     o   Dynamic field and display attributes
  66.     o   Mouse support for bitmap environments
  67.  
  68.  
  69.  
  70. Documentation
  71. =============
  72. Complete documentation is available with the release.  All users are advised to
  73. obtain the most current documentation.  The Version 3.0 documentation set
  74. includes:
  75.  
  76.         SQL*Forms Operator's Guide              3301-V3.0
  77.         SQL*Forms Operator's Quick Reference    3704-V3.0
  78.         SQL*Forms Designer's Tutorial           3302-V3.0
  79.         SQL*Forms Designer's Quick Reference    3708-V3.0
  80.         SQL*Forms Designer's Reference          3304-V3.0
  81. | NEW!  Advanced SQL*Forms Techniques           5763-V3.0
  82.         Introduction to SQL*Forms and SQL*Menu   19192-V3
  83.  
  84. NEW!  Advanced SQL*Forms designers are encouraged to get the new Advanced
  85. SQL*Forms Techniques book, now available showing you how to implement specific
  86. SQL*Forms functionality in your applications.
  87.  
  88. For information on mapping function keys and video attributes or customizing
  89. key mappings, consult the Oracle*Terminal User's Guide, part no. 5206-V1.0.
  90.  
  91. For complete information on PL/SQL, refer to the PL/SQL User's Guide and
  92. Reference, part no. 800-V1.0.
  93.  
  94. Keyboard cards are available for designers and operators:
  95.  
  96.         SQL*Forms Designer's Keyboard Card       755-V3.0
  97.         SQL*Forms Operator's Keyboard Card      3906-V3.0
  98.  
  99.  
  100. Upgrading from Earlier Versions
  101. ===============================
  102. 1.      All forms created prior to Version 3.0.15 must be regenerated to run
  103.         with SQL*Forms Version 3.0.15.  This was due to a PL/SQL problem that
  104.         was fixed, that required regeneration on the SQL*Forms side.  Now that
  105.         version 3.0.16 is full production, we will strive to minimize future
  106.         regeneration needs.
  107.  
  108. 2.      Forms created prior to SQL*Forms Version 3.0 must have their .INP files
  109.         converted, using CONVFORM -vXX inp_filename formname username/password,
  110.         where:
  111.  
  112.                 XX is either 20 or 23, depending on if you are converting from
  113.                 Version 2.0 or 2.3 of SQL*Forms
  114.  
  115.                 inp_filename is the name (without the .INP suffix) of the old
  116.                 INP file that you are converting to Version 3.0 - not the name
  117.                 of the new INP file that you want to create as stated on page
  118.                 23-4 of the SQL*Forms Designer's Reference Version 3.0.  This
  119.                 documentation bug has been fixed in the latest reprint of the
  120.                 document.
  121.  
  122.         Once the .INP files are converted to the Version 3.0 format, forms must
  123.         be regenerated by using GENERATE inp_filename username/password.
  124.  
  125. 3.      When you use the CONVFORM utility to convert an INP file which you have
  126.         been running under Version 2.0, Oracle Corporation recommends that you
  127.         specify the -f switch in order to preserve the forms's functionality.
  128.         The -f parameter inserts the NOFAIL key-word after #exemacro in all
  129.         trigger steps.  For more information on the NOFAIL key-word, refer to
  130.         the SQL*Forms Documentation Addendum Version 2.3.
  131.  
  132.         If you decide to take advantage of Version 3.0's success/failure logic,
  133.         you should not specify the -f switch.  However, be advised that the
  134.         resulting form's changed behavior might require you to perform
  135.         additional modification and testing.
  136.  
  137.         Also, when converting directly from Version 2.0 to 3.0, you need to
  138.         convert the CRT files in order for your forms to interpret box
  139.         characters.  This is not the case when going from Version 2.3 to 3.0.
  140.         If you do not have CRT installed when you run the CONVFORM utility from
  141.         Version 2.0 to 3.0 you either need to copy the necessary CRT files into
  142.         the SQLFORMS30 directory, or you need to reassign the logicals
  143.         ora_crt30 and ora_crtdef30 to point to the location of the CRT files.
  144.  
  145. 4.      For information on using Version 2 CRT files and key mappings with
  146.         SQL*Forms 3.0, refer to the Key Mappings section below and the
  147.         Oracle*Terminal Release Bulletin.
  148.  
  149. 5.      To aid in your migration from SQL*Forms 2.3 to SQL*Forms 3.0, some of
  150.         the symbols used to invoke SQL*Forms 2.3 have been retained for
  151.         SQL*Forms 3.0.  These symbols are IAC, IAD, IAG, IAP, RUNFORM,
  152.         SQLFORMS, CONVFORM, and GENERATE.  While this prevents users from
  153.         having to learn new ways to invoke SQL*Forms 3.0, it can cause
  154.         problems for Oracle products which require SQL*Forms 2.3.  These
  155.         products include:
  156.  
  157.         CASE*Dictionary 4.1
  158.         CASE*Generator for SQL*Forms 1.0
  159.         CASE*Designer 1.1
  160.         SQL*Menu 4.1
  161.         Easy*SQL 2.3
  162.         SQL*Plus 3.0
  163.         SQL*TextRetrieval 1.1
  164.  
  165.         Before using any of these products, the user must type:
  166.  
  167.         @ORA_SQLFORMS:SQLFORMSUSER
  168.  
  169.         It might be convenient to have your system manager define this
  170.         command as a symbol.
  171.  
  172.         After using this command and before using SQL*Forms 3.0 or
  173.         SQL*Menu 5.0, the user must type:
  174.  
  175.         @ORA_SQLFORMS30:SQLFORMS30USER
  176.  
  177.         Alternatively, if you specify a "30" at the end of the above symbols
  178.         (e.g. sqlforms30), they will run SQL*Forms 3.0, while a "23" will
  179.         invoke SQL*Forms 2.3 (e.g. sqlforms23).
  180.  
  181. 6.      In SQL*Forms Version 2.3, it was possible, though not recommended, to
  182.         have a column defined as a CHAR in a database table and have the
  183.         corresponding field defined as a NUMBER or a DATE within the SQL*Forms
  184.         applications.  In most cases, this was done to perform some type of
  185.         formatting for the field.
  186.  
  187.         SQL*Forms Version 3.0 processes NUMBER and DATE fields as true NUMBER
  188.         and DATE datatypes - not character strings.  A form developed on
  189.         Version 2.3 that used this convention will not behave the same in
  190.         SQL*Forms 3.0.  For example, leading zeroes would be truncated on a Zip
  191.         Code field that was defined as CHAR in the database and NUMBER in the
  192.         form.  Format masks are an easier way to enforce changes in the display
  193.         format of a field and to ensure that valid data gets entered.
  194.  
  195.         In previous versions of SQL*Forms, RMONEY fields would round fields
  196.         when data retrieved had more than 2 decimal places.  In SQL*Forms 3.0,
  197.         an error message is issued that informs the user that too many decimal
  198.         places have been entered (bug fix 31586).  If rounding is desired, a
  199.         format mask can be used to enforce rounding.  This should be done on a
  200.         field defined with a NUMBER datatype - not RMONEY.
  201.  
  202.  
  203. General Notes/Restrictions
  204. ==========================
  205. 1.      All Oracle*Terminal key mappings are stored in ORA_ROOT:[SQLFORMS30].
  206.         Default mappings can be found in the ORATERM.R resource file, and
  207.         should not be deleted nor moved from the [SQLFORMS30] directory.
  208.  
  209. 2.      On VMS systems, when SQL*Forms 3.0 is installed, the CONVFORM and
  210.         CONVFORM30 symbols are created to invoke the SQL*Forms convert utility.
  211.         Note that the SQL*Forms Designer's Reference only refers to
  212.         CONVFORM and not CONVFORM30.
  213.  
  214. 3.      On page 23-4 of some versions of the SQL*Forms 3.0 Designer's
  215.         Reference, in the section named 'INP to INP Conversion' the text and
  216.         the example are wrong.  The example should read:
  217.  
  218.         CONVFORM -v23 OLD OLD [username/password]
  219.  
  220.         where:
  221.  
  222.                 the first 'OLD' is the name of the INP file that you want to
  223.                 convert (without the .INP suffix) - not the name of the INP
  224.                 file you want to create.
  225.  
  226.                 the second 'OLD' is the name of the old form that you want
  227.                 to convert, not the name of the new form you want to create.
  228.  
  229.         These documentation bugs have been fixed in the latest reprints of the
  230.         documentation.
  231.  
  232. 4.      When using SQL*Forms on the PC, a form is limited to 744 fields per
  233.         form.  Also on the PC, all form text, V2 trigger text, trigger
  234.         procedures, and compiled PL/SQL code is now unlimited.
  235.  
  236. 5.      The DEMOBLD.COM file has been revised.  In Version 3.0.15 and above,
  237.         when demobld.com is executed, it will inform the user that certain
  238.         demo tables will be dropped and then asks if the user wants to proceed
  239.         (as opposed to not informing the user and just dropping the demo
  240.         tables).
  241.  
  242.  
  243. PL/SQL Notes/Restrictions
  244. =========================
  245. 1.        PL/SQL CHECKS
  246.           ~~~~~~~~~~~~
  247.           In the course of applications development using SQL*Forms
  248.           and PL/SQL, infrequently an error message such as:
  249.  
  250.           PL/SQL Check 12345 -- Please inform your Oracle Representative
  251.  
  252.           may present itself at trigger/procedure-compilation time. In
  253.           most cases these "Check" errors are the result of
  254.           inadvertently using a PL/SQL object in an unexpected or
  255.           unsupported manner, or even more often by an error in syntax
  256.           which confuses the PL/SQL compiler. An example might be the
  257.           (invalid) attempt to assign a value to a user-defined
  258.           exception, or an (incorrect) attempt to RAISE a local PL/SQL
  259.           variable. In nearly all cases, a systematic use of comments
  260.           /* ... */  can quickly narrow down the problem to a
  261.           particular statement in the PL/SQL block. This simpler case
  262.           can then be examined more closely to see which syntactic or
  263.           semantic error is causing the "Check" error.
  264.  
  265.  
  266. 2.        INTERNAL SQL*FORMS CONSTANTS
  267.           ~~~~~~~~~~~~~~~~~~~~~~~~~~~
  268.           The arguments to many of the SQL*Forms packaged procedures and
  269.           packaged functions occasionally cause confusion. One may
  270.           wonder why sometimes values are enclosed in single quotes,
  271.           while other values are simply given without quotes. An
  272.           example of a packaged function that illustrates this point
  273.           is:
  274.                 BLOCK_CHARACTERISTIC( 'blockname', FIRST_FIELD )
  275.  
  276.           Or consider the packaged procedure:
  277.  
  278.                 EXIT_FORM( ASK_COMMIT , NO_ROLLBACK );
  279.  
  280.           These "special words" like ASK_COMMIT, NO_ROLLBACK, and
  281.           FIRST_FIELD do not require quotes because they are actually
  282.           PL/SQL numeric constants which are declared automatically by
  283.           SQL*Forms at startup. Each one of these PL/SQL constants
  284.           corresponds to a unique integer, whose *actual* numeric value
  285.           is of no practical use to the Forms designer. With this in mind,
  286.           it is easy to see how a Form-Level procedure could actually
  287.           "receive" the value ASK_COMMIT in a *NUMBER* parameter. In
  288.           fact some of the automatically-generated Master/Detail
  289.           procedures DO use this technique. Currently there is no
  290.           mechanism for designers to declare their own such numeric
  291.           constants, so the internally declared ones are the only ones
  292.           which exist in Forms 3.0.
  293.  
  294.  
  295. 3.        DEFAULT PARAMETER VALUES FOR PL/SQL PROCEDURES
  296.           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  297.           When declaring a PL/SQL procedure, it is possible to assign
  298.           default values to the formal parameters declared. The default
  299.           value (either a constant or an expression) must, of course,
  300.           correspond in datatype with the type declared for the formal
  301.           parameter with which it is associated. For example, consider
  302.           the procedure below:
  303.  
  304.              PROCEDURE fp_raise_sal ( pp_sal       IN OUT NUMBER,
  305.                                       pp_percent_raise IN NUMBER)
  306.              IS
  307.              BEGIN
  308.                 pp_sal := pp_sal * ( pp_percent_raise / 100 );
  309.              END;
  310.  
  311.           To raise the salary of the current employee in the EMP block
  312.           by thirty (30) percent, we would then use the command:
  313.  
  314.              fp_raise_sal( :EMP.SAL , 30 );
  315.  
  316.           However, if ten (10) percent was the default raise, we could
  317.           build this fact into the procedure itself by giving the
  318.           PL/SQL parameter 'pp_percent_raise' a deafult value of ten
  319.           (10). We use the intuitive syntax:
  320.  
  321.              PROCEDURE fp_raise_sal ( pp_sal       IN OUT NUMBER,
  322.                                       pp_percent_raise IN NUMBER := 10 )
  323.              IS ...                                              ~~~~~
  324.                                                +--------+          /
  325.                                              __  Default  ________/
  326.                                                 Value
  327.                                                +--------+
  328.  
  329.           This allows us to call the 'FP_RAISE_SAL' procedure with
  330.           either of the following two syntaxes:
  331.  
  332.              fp_raise_sal ( :EMP.SAL );       /* Trailing parameter    */
  333.                                               /* which has a default   */
  334.  
  335.                                               /* may be omitted.       */
  336.  
  337.              fp_raise_sal ( :EMP.SAL , 20 );  /* Providing a value for */
  338.                                               /* the 2nd parameter     */
  339.                                               /* overrides the default */
  340.  
  341.           This technique could also be used to enhance existing
  342.           procedures to accept additional parameters *without* having to
  343.           alter any of the existing invocations of that procedure --
  344.           provided each of the new parameters has a Default Value
  345.           associated to it.
  346.  
  347.  
  348. 4.        RESTRICTIONS
  349.           ~~~~~~~~~~~~
  350.          (+) Default values for formal parameters are allowed
  351.               exclusively for 'IN' parameters.
  352.  
  353.               Both 'OUT' and 'IN OUT' parameters must have a place to
  354.               copy their value on the way "out" of the procedure, and
  355.               hence cannot be omitted from the procedure's parameter list.
  356.  
  357.           (+) Only *TRAILING* parameters having default values may be
  358.               omitted from the procedure call.
  359.  
  360.               For example, if a procedure is declared with two formal
  361.  
  362.               parameters having default values as follows:
  363.  
  364.  
  365.               PROCEDURE fp_proc ( pp_one   IN CHAR,
  366.                                   pp_two   IN CHAR := 'Hello',
  367.                                   pp_three IN CHAR := 'World') IS ...
  368.  
  369.               Then we have the following behaviour when omitting one
  370.               parameter.
  371.  
  372.                      fp_proc( 'FirstVal', 'SecondVal');
  373.                                   |           |
  374.                                   V           V
  375.                      fp_proc(   pp_one  ,  pp_two   ,   pp_three   );
  376.                                   |           |            |
  377.                                   V           V            V
  378.                              'FirstVal'  'SecondVal'   'World'
  379.  
  380.  
  381.               and definitely NEVER :
  382.                              ~~~~~
  383.  
  384.                    fp_proc( 'FirstVal', 'SecondVal');
  385.                                   |               \_______
  386.                                   V                       \
  387.                    fp_proc(  pp_one  ,  pp_two   ,   pp_three );
  388.                                   |           |            |
  389.                                   V           V            V
  390.                               'FirstVal'   'Hello'      'SecondVal'
  391.  
  392.               In short, in this example, to specify a value for the
  393.               third parameter, you *MUST* also supply a value for the
  394.               second parameter.
  395.  
  396.  
  397. 5.        DECLARING AND USING PL/SQL FUNCTIONS
  398.           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  399.  
  400.           In addition to (Form-Level) procedures, SQL*Forms also
  401.          supports the use of PL/SQL functions. Any designer who has
  402.           used both the built-in packaged procedures and packaged
  403.           functions will understand the simple differences between
  404.           the two. Below we compare the two:
  405.  
  406.              Procedure                       Function
  407.              -------------------------       --------------------------
  408.           (+) Defined in the SQL*Forms    (+) Defined in the SQL*Forms
  409.               'Procedure Definition'          'Procedure Definition'
  410.               Screen                          Screen
  411.  
  412.           (+) May be referenced or        (+) May be referenced or
  413.               copied from "library"           copied from "library"
  414.               form                            form, as if it were a
  415.                                               procedure
  416.  
  417.           (+) Is a Named PL/SQL Block     (+) Is a named PL/SQL Block
  418.               which performs a task           which represents an expression
  419.               when invoked                    of an explicit datatype
  420.                                               when evaluated
  421.  
  422.           (+) May accept parameters       (+) May accept parameters
  423.  
  424.           (+) Has no return value, but    (+) MUST return one value, and
  425.               May pass back results           May pass back results
  426.               in OUT parameters               in OUT parameters
  427.  
  428.           (+) May have default values     (+) May have default values
  429.               for formal parameters           for formal parameters
  430.  
  431.           (+) Allows trailing params      (+) Allows trailing params
  432.               possessing deault values        possessing default values
  433.               to be omitted when              to be omitted when
  434.               invoking                        evaluating
  435.  
  436.           (+) For exception handling,     (+) For exception handling,
  437.               Behaves like embedded           Behaves like embedded
  438.               PL/SQL block when invoked       PL/SQL block when evaluated
  439.  
  440.  
  441.           The syntax for declaring a PL/SQL function parallels that of
  442.           a Procedure, with the addition of the  'RETURN datatype'
  443.           clause which identifies the type of value which the function
  444.           returns:
  445.           --------------------------------------------------------------
  446.           FUNCTION function_name ( parameter_name mode [:= value], ... )
  447.                                                   ~~~~     ~~~~~
  448.  
  449.             RETURN datatype
  450.                    ~~~~~~~~
  451.            IS
  452.  
  453.          BEGIN
  454.             :
  455.             RETURN( expression );
  456.             :       ~~~~~~~~~~
  457.           EXCEPTION
  458.             :
  459.             RETURN( expression );
  460.             :       ~~~~~~~~~~
  461.           END;
  462.           --------------------------------------------------------------
  463.  
  464.               MODE: Is one of IN, OUT, or IN OUT.
  465.               ~~~~
  466.  
  467.              VALUE: Optional constant or expression of the same
  468.              ~~~~~  datatype as the associated parameter to specify
  469.                     a default value for the formal parameter. An
  470.                     explicit value passed-in at evaluation time
  471.                     overrides the default value.
  472.           DATATYPE: Any of the datatypes that are supported for PL/SQL
  473.            ~~~~~~~~  formal parameters are supported for the RETURN
  474.                     value of a PL/SQL function. These include DATE,
  475.                     NUMBER, CHAR, and BOOLEAN. Recall that LONG is not
  476.                     a supported datatype of either parameters or return
  477.                     values.
  478.  
  479.         EXPRESSION: A constant or expression of the same datatype as
  480.         ~~~~~~~~~~  declared in the Function Specification's
  481.                     'RETURN datatype' clause. It is an *ERROR* if a
  482.                     PL/SQL function does *NOT* return a value on exit.
  483.  
  484.           The PL/SQL instruction 'RETURN( expr )' returns the given
  485.           expression as the value of the function and exits with success.
  486.  
  487.  
  488.           Since a function represents an expression of a given
  489.           datatype, it may be used in precisely the same way that a
  490.           constant or local variable of the same datatype would be
  491.           used.
  492.  
  493.           One notable exception to this rule is the use of PL/SQL
  494.           functions in DML statements. Only constants or local
  495.           variables may be used in the role of 'bind variables' in DML
  496.           statements. A function value can always be assigned to a
  497.           local variable of appropriate datatype, and this local
  498.           variable used in the DML statement, to accomplish the same
  499.           result.
  500.  
  501.           An example of a function, FF_DEPT_SIZE, which returns the
  502.           total number of employees in a given department follows:
  503.  
  504.           +--------------------------------------------------------
  505.           | Procedure Name:  FF_DEPT_SIZE
  506.           +--------------------------------------------------------
  507.           |               ---- Procedure Text ----
  508.           |
  509.           |  /* FF_DEPT_SIZE
  510.           |  ** ~~~~~~~~~~~~~
  511.           |  ** Returns the number of employees in
  512.           |  ** the department whose number is passed in as
  513.           |  ** a parameter.
  514.           |  */
  515.           |  FUNCTION ff_dept_size ( pp_deptno IN NUMBER )
  516.           |
  517.           |    RETURN NUMBER              /* Funct. Return Type  */
  518.           |
  519.           |  IS
  520.           |     lv_temp_count NUMBER;     /* Declaration Section */
  521.           |
  522.           |  BEGIN
  523.           |        SELECT COUNT(*)
  524.           |          INTO lv_temp_count
  525.           |          FROM EMP
  526.           |         WHERE DEPTNO = pp_deptno;
  527.           |     RETURN ( lv_temp_count ); /* Return Function Val */
  528.           |
  529.           |  EXCEPTION
  530.           |     WHEN OTHERS THEN
  531.           |        RETURN ( -1 );         /* Return minus one    */
  532.           |  END;                         /* if problems arise   */
  533.           +--------------------------------------------------------
  534.  
  535.  
  536.           Then, a trigger could use this function in the following way:
  537.  
  538.           +--------------------------------------------------------
  539.           | Trigger Name:  ON-VALIDATE-FIELD
  540.           +--------------------------------------------------------
  541.           |  /*
  542.           |  ** If the Total Number of Employees in
  543.           |  ** the current department exceeds 100,
  544.           |  ** then disallow this entry
  545.           |  */
  546.           |  IF ( ff_dept_size(:DEPT.DEPTNO) > 100 ) THEN
  547.           |       ------------
  548.           |     MESSAGE('WOW! Current Department is too big now...');
  549.           |     RAISE FORM_TRIGGER_FAILURE;
  550.           |  ELSE
  551.           |     :CONTROL.TOTAL_EMPS := ff_dept_size( :DEPT.DEPTNO );
  552.           |  END IF;
  553.           +--------------------------------------------------------
  554.  
  555.           While the above trigger is not the most efficient way of
  556.           accomplishing the goal -- i.e. we call the function twice
  557.           when we could have coded it such that we only used the
  558.           function once -- it does demonstrate that functions can be
  559.           used in IF...THEN and assignment statements.
  560.  
  561.           NOTE: Anything that can be done with a Function, can also be
  562.                 done with a Procedure which includes an OUT parameter
  563.                 to return the desired value. Anything that can be done
  564.                 with a Procedure, can also be performed with a Function
  565.                 whose RETURN value reports the status of the  task
  566.                 performed. So, while the syntax of a Procedure and a
  567.                 Function differs slightly, a particular task can be
  568.                 done via a PL/SQL Procedure or Function based on the
  569.                 syntax which the designer deems most convenient.
  570.  
  571.  
  572. 6.        PLANNING AHEAD FOR BUILT-IN PROCEDURES (FORMS 4.0 AND HIGHER)
  573.           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  574.           SQL*Forms 4.0 will introduce a number of new packaged
  575.           procedures, or "built-ins", that will enhance the current set
  576.           of functionality available to the Forms Designer. Future versions
  577.           of SQL*Forms (4.0 and higher) will all use these built-ins.
  578.           When these new procedures (and functions) are introduced in
  579.           the software, these new names will become reserved words and
  580.           would conflict with any Form-Level procedures with the same
  581.           names in your application. To plan ahead, we have provided a
  582.           tentative list of "built-in" procedure names which should not
  583.           be used for names of Form-Level Procedures and Functions of
  584.           your own creation. Any conflicts that you identify can be
  585.           changed now to avoid problems later. Adopting a naming
  586.           convention for your procedures and functions in your
  587.           applications like:
  588.  
  589.              FP_PROCNAME      for Forms Procedure
  590.              FF_FUNCTNAME     for Forms Function
  591.              PP_PARMNAME      for PL/SQL Parameter
  592.  
  593.           can insure that your future development will not encounter
  594.           any naming conflicts as SQL*Forms is enhanced.
  595.  
  596.                 The tentative list for 4.0 includes:
  597.                 ------------------------------------
  598.                 Add_Association_List_Pair
  599.                 Add_Group_Column
  600.                 Add_Group_Row
  601.                 Cancel_Dialog
  602.                 Change_Alert_Message
  603.                 Clear_Message_Line
  604.                 Close_Query
  605.                 Convert_Other_Value
  606.                 Create_Association_List
  607.                 Create_Group
  608.                 Create_Group_From_Query
  609.                 Create_Queried_Record
  610.                 Delete_Association_List
  611.                 Delete_Group
  612.                 Delete_Group_Row
  613.                 Delete_Group_Rows
  614.                 Delete_Timer
  615.                 Disable_Item
  616.                 Fetch_Record
  617.                 Find_Alert
  618.                 Find_BColumn
  619.                 Find_CColumn
  620.                 Find_DColumn
  621.                 Find_Editor
  622.                 Find_Group
  623.                 Find_LOV
  624.                 Find_NColumn
  625.                 Find_Window
  626.                 Get_Editor_Value
  627.                 Get_Group_Cell
  628.                 Get_Group_Row
  629.                 Get_Group_Row_Count
  630.                 Get_Group_Select_Count
  631.                 Get_Group_Selection
  632.                 Get_LOV_Selection
  633.                 Get_Menu_Item
  634.                 Get_Menu_Radio_Group
  635.                 Group_Rows_Fetched
  636.                 Hide_Window
  637.                 Image_Add
  638.                 Image_And
  639.                 Image_Or
  640.                 Image_Subtract
  641.                 Image_UnZoom
  642.                 Image_Xor
  643.                 Image_Zoom
  644.                 Insert_Record
  645.                 Logon
  646.                 Logon_Screen
  647.                 Logout
  648.                 Move_Window
  649.                 OracleGraphics_Available
  650.                 Populate_Group
  651.                 Read_Image_Database
  652.                 Read_Image_File
  653.                 Read_Sound_Database
  654.                 Read_Sound_File
  655.                 Replace_Content
  656.                 Repopulate_Group_With_Query
  657.                 Reset_Group_Selection
  658.                 Resize_Window
  659.                 Run_OracleGraphics
  660.                 Run_SQLReportWriter
  661.                 Scroll_Canvas
  662.                 Select_Records
  663.                 Set_Block
  664.                 Set_Form
  665.                 Set_Group_Cell
  666.                 Set_Group_Selection
  667.                 Set_Group_Row
  668.                 Set_Menu_Item
  669.                 Set_Timer
  670.                 Set_Record_Status
  671.                 Set_Window_Content
  672.                 Show_Alert
  673.                 Show_Dialog
  674.                 Show_Editor
  675.                 Show_LOV
  676.                 Show_Window
  677.                 SQLReportWriter_Available
  678.                 Update_Record
  679.                 Write_Image_Database
  680.                 Write_Image_File
  681.                 Write_Sound_Database
  682.                 Write_Sound_File
  683.  
  684.                 Built-ins planned for 5.0:
  685.                 --------------------------
  686.                 Add_Button
  687.                 Add_Checkbox
  688.                 Add_Edit_Item
  689.                 Add_Image
  690.                 Add_Radio_Group
  691.                 Add_Radio_Item
  692.                 Add_Rectangle
  693.                 Add_Sound
  694.                 Add_Text
  695.                 Add_Text_List
  696.                 Create_Alert
  697.                 Create_Editor
  698.                 Create_LOV
  699.                 Create_Window
  700.                 Delete_Alert
  701.                 Delete_LOV_Selection
  702.                 Delete_Editor
  703.                 Delete_Window
  704.                 Pecs_Event
  705.                 Pecs_Facility
  706.  
  707.  
  708.  
  709.