RDOHELP72.HLB  —  RSE  Format  cross-clause  More
    The RDO documentation indicates that views do not allow
    updates to returned data. They do not specify this
    restriction on a cross of two relations from the same
    database. Oracle Rdb allows it to work if you use a WITH
    clause.

    Any field that appears in the RSE (record selection
    expression) is marked as read-only. You cannot update these
    fields as this may remove the record from the join, or add
    a new record to the join that will not be recognized.

    In general, the record stream created by a join (CROSS)
    cannot be updated. A workaround is to fetch the RDB$DB_KEY
    in the loop and generate a separate FOR loop to modify the
    value. The following example shows this situation:

    #include stdio

    DATABASE MAPB = FILENAME "[rdml]PERSONNEL";

    main()
    {
     READY MAPB;
     START_TRANSACTION READ_WRITE;

     printf("Entering EMPLOYEES & JOB_HISTORY relations:\n\n");

     FOR E IN EMPLOYEES
        CROSS JH IN JOB_HISTORY OVER EMPLOYEE_ID
        WITH (JH.EMPLOYEE_ID > "00000" OR E.FIRST_NAME STARTING
        WITH "A-")
        SORTED BY E.LAST_NAME

        FOR E1 IN EMPLOYEES WITH E1.RDB$DB_KEY = E.RDB$DB_KEY
        printf("\n\n%s %s < found  ",E1.FIRST_NAME ,E1.LAST_NAME);

        MODIFY E1 USING
        strcpy(E1.FIRST_NAME,"Xavier    ");

        printf("\n%s %s < changed",E1.FIRST_NAME,E.LAST_NAME);
        END_MODIFY;
        END_FOR;

     END_FOR;

     printf("\n\nRolling Back the modifys");
     ROLLBACK;

     FINISH;
     printf("\n\nFinished");
    }
Close Help