VMS Help  —  RDML72  Statements  BASED_ON
    The BASED ON clause lets you extract from the database the
    data type and size of a field and then use it to declare host
    language types. These are Pascal TYPE(s), and C typedef(s). When
    you preprocess your program, the RDML preprocessor assigns the
    data type and size attributes associated with the field to the
    variable or function you declare using the the BASED ON clause.

    See the DECLARE_VARIABLE statement for information on declaring
    host language variables.

1  –  Examples

    The following programs demonstrate the use of the BASED ON clause
    to declare types. Both the C and Pascal programs use the BASED
    ON clause to declare the function, job_name. These programs pass
    the value of the field JOB_CODE to the function. The function
    determines the job title associated with the job code and passes
    the job title back to the calling program. Note that in the C
    program a program variable, temp_job_name, is required so that
    the function can return the job title to the calling program.
    In Pascal, function values are returned to the calling program
    automatically.

1.1  –  C Example

    #include <stdio.h>
    DATABASE PERS = FILENAME "PERSONNEL";

    typedef  BASED ON JOBS.JOB_CODE job_code_type;
    typedef  BASED ON JOBS.JOB_TITLE job_title_type;
    DECLARE_VARIABLE temp_job_name SAME AS JOBS.JOB_TITLE;

    job_title_type job_name(job)
    job_code_type job;
    { /* begin  function */
        READY PERS;
        START_TRANSACTION READ_ONLY;

        FOR FIRST 1 J IN JOBS
        WITH J.JOB_CODE = job
           strcpy (temp_job_name, J.JOB_TITLE);
        END_FOR;

        COMMIT;
        FINISH;
        return temp_job_name;
    } /* end of function */

    main ()
    {
    printf ("%s\n",job_name("APGM"));
    }

1.2  –  Pascal Example

    program based_on_clause (INPUT,OUTPUT);
    DATABASE PERS = FILENAME 'PERSONNEL';

    type
        job_code_type  = BASED ON JOBS.JOB_CODE;
        job_title_type = BASED ON JOBS.JOB_TITLE;

    function job_name (job : JOB_CODE_TYPE ) : JOB_TITLE_TYPE;

    begin {* function *}
        READY PERS;
        START_TRANSACTION READ_ONLY;

        FOR FIRST 1 J IN JOBS
        WITH J.JOB_CODE = job
              job_name := J.JOB_TITLE;
        END_FOR;

        COMMIT;
        FINISH;
    end; {* function *}

    begin {* main *}
    writeln (job_name ('APGM'));
    end.

2  –  Format

  (B)0BASED ON qqqqqwqq>qqqqqqqqqqqqqqqqqqqqwqqqqqqqqk
                mqq> db-handle qq> . qqqj        x
                                                 x
  lqqqqqqqqqqqqqqqqqqqqqq<qqqqqqqqqqqqqqqqqqqqqqqj
  x
  mqqqqq> relation-name qqqq>  .  qqqq> field-name

2.1  –  Format arguments

    db-handle              Database handle. A host variable used
                           to refer to a specific database you have
                           invoked. For more information see the
                           entry on the Database Handle clause.

    relation-name          The name of a relation in the database.

    field-name             The name of a field in a relation. For
                           example, once you have defined E as
                           the context variable for the EMPLOYEES
                           relation, E.LAST_NAME is a value
                           expression that refers to a value from
                           the LAST_NAME field of EMPLOYEES.
Close Help