VMS Help  —  RDML72  Statements  FOR Segmented Strings
    Sets up a record stream consisting of segments from a segmented
    string field. Because a single segmented string field value is
    made up of multiple segments, a record stream that includes
    a segmented string field is nested. The outer loop retrieves
    records that include the segmented string field and the inner
    loop retrieves the segments from this field, one at a time.
    Therefore, a FOR statement that retrieves segmented strings must
    be nested within a START_STREAM or FOR statement.

1  –  Examples

    The following programs demonstrate the use of the FOR statement
    to retrieve segmented strings. Since the PERSONNEL database does
    not have any segmented strings stored, the programs first store
    three strings in the RESUME field of the RESUMES relation (for
    more information on storing segmented strings, see the help entry
    on STORE Statement with segmented strings). The programs retrieve
    the segmented strings using a nested FOR statement. The outer FOR
    statement selects a record based on EMPLOYEE_ID. The inner FOR
    statement prints each segmented string stored in RESUME for the
    selected employee.

1.1  –  C Example

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

    main()
    {
    int line;
    char *document[3];

    document[0] = "first line of resume  ";
    document[1] = "second line of resume ";
    document[2] = "last line of resume   ";

    READY PERS;
    START_TRANSACTION READ_WRITE;

    STORE R IN RESUMES USING
       strcpy (R.EMPLOYEE_ID,"12345");
       for (line = 0; line <= 2; line++)
          STORE SEG IN R.RESUME
                strcpy(SEG.VALUE,document[line]);
                SEG.LENGTH = strlen(SEG.VALUE);
          END_STORE;
    END_STORE;

    FOR R IN RESUMES WITH R.EMPLOYEE_ID = "12345"
       FOR SEG IN R.RESUME
          printf("%s\n",SEG.VALUE);
       END_FOR;
    END_FOR;

    COMMIT;
    FINISH;
    }

1.2  –  Pascal Example

    program segstr (input,output);
    DATABASE PERS = FILENAME 'PERSONNEL';

    type                     lines = varying [80] of char;
    var                      linecnt  : integer;
                             document : array [0..2] of lines;

    begin

    document[0] := 'first line of resume  ';
    document[1] := 'second line of resume ';
    document[2] := 'last line of resume   ';

    READY PERS;
    START_TRANSACTION READ_WRITE;

    STORE R IN RESUMES USING
       R.EMPLOYEE_ID:= '12345';
       for linecnt := 0 to 2 do
          STORE SEG IN R.RESUME
             SEG := document[linecnt];
             SEG.LENGTH := length(document[linecnt]);
          END_STORE;
    END_STORE;

    FOR R IN RESUMES WITH R.EMPLOYEE_ID = '12345'
        FOR SEG IN R.RESUME
          writeln (SEG);
        END_FOR;
    END_FOR;

    COMMIT;
    FINISH;
    end.

2  –  Format

  (B)0FOR qq> ss-handle  qqq> IN qqqq> ss-field  qqqqqwq>qqqqqqqqqqqqwqk
                                                  mq> on-error qqj x
        lqqqqqqqqqqqqqqqqqqqqqqqqqqqq<qqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
        mqqqq> assignment qqqqqqqqq> END_FOR

2.1  –  Format arguments

    ss-handle              A name that identifies the segmented
                           string.

    ss-field               A qualified field name that refers to a
                           field defined with the SEGMENTED STRING
                           data type. Note that this field name, like
                           all field names in a FOR statement, must
                           be qualified by its own context variable.
                           This second context variable must match
                           the variable declared in the outer FOR
                           statement. See the Examples entry.

    on-error               The ON ERROR clause. Specifies host
                           language statement(s) to be performed
                           if an error occurs during the FOR loop.
                           For more information see the entry on ON
                           ERROR.

    assignment             Associates the two database variables with
                           a value expression. The database variables
                           refer to the segment of a segmented string
                           and its length. The special name for
                           the segment can be either "VALUE" or
                           "RDB$VALUE". The special name for the
                           segment length can be either "LENGTH"
                           or "RDB$LENGTH". You cannot assign any
                           other database variables to the value
                           expressions for segmented strings. The
                           assignment operator for RDML Pascal is
                           ":=" and for RDML C is "=" or strcpy.
Close Help