Was this helpful?
Multiple Session Examples
This section presents two examples of multiple sessions. The first example, illustrates session switching using two open sessions in a forms‑based application. These sessions gather project information for updating the projects database using the personnel database to verify employee identification numbers.
exec sql begin declare section;
   empid integer;
   found integer;
   ...
exec sql end declare section;
 
/* Set up two database connections */
exec sql connect 'projects/rdb' session 1;
exec sql connect 'unixbox::personnel/db2udb' session 2;
 
/* Set 'projects' database to be current session */
exec sql set_sql (session = 1);
 
exec frs display projectform;
exec frs activate field empid;
exec frs begin;
 
/* Validate user‑entered employee id against master 
** list of employees in personnel database. */
 
found = 0;
exec sql getform (:empid = empid);
 
/* Switch to 'personnel' database session */ 
exec sql set_sql (session = 2);
exec sql repeated select 1 into :found from employee
  where empid = :empid;
 
/* Switch back to 'project' database session */
exec sql set_sql (session = 1);
if (found !=1) then
 exec frs message 'Invalid employee identification';
 exec frs sleep 2;
else
  exec frs resume next;
endif;
 
exec frs end;
program code to validate other fields in 
        'projectform'
exec frs activate menuitem 'Save';
exec frs begin;
get project information and update 'projectinfo' 
         table
exec frs end;
...
 
exec sql disconnect;
exec sql set_sql (session = 2);
exec sql disconnect;
The second example illustrates session switching inside a select loop and the resetting of status fields. The main program processes sales orders and calls the subroutine, new_customer, for every new customer.
The main program:
...
exec sql include sqlca;
exec sql begin declare section;
 
/* Include output of DCLGEN for declaration 
** of record order_rec 
 
*/
exec sql include 'decls';
exec sql end declare section;
exec sql connect 'customers/alb' session 1;
exec sql connect sales session 2;
...
 
exec sql select * into :order_rec from orders;
exec sql begin;
if (order_rec.new_customer = 1) then
  call new_customer(order_rec);
endif
process order;
exec sql end;
...
 
exec sql disconnect;

exec sql set_sql(session = 1);
exec sql disconnect;
The subroutine, new_customer, from the select loop, containing the session switch:
subroutine new_customer(record order_rec)
begin;

exec sql set_sql(session = 1);
exec sql insert into accounts values (:order_rec);

process any errors;
exec sql set_sql(session = 2);

sqlca.sqlcode = 0;
sqlca.sqlwarn.sqlwarn0 = ' ';

end subroutine;
Last modified date: 08/14/2024