Example 1: Using a GET DIAGNOSTICS statement to retrieve row
count
PROCEDURE increate_nh (SQLSTATE, :rows_affected INTEGER);
BEGIN ATOMIC
UPDATE salary_history
SET salary_amount = salary_amount * 1.05
WHERE salary_end IS NULL
AND employee_id IN (SELECT employee_id
FROM employees
WHERE state = 'NH' );
GET DIAGNOSTICS :rows_affected = ROW_COUNT;
END;
Example 2: Using RETURNED_SQLSTATE
SQL> DECLARE :Y CHAR(5);
SQL> BEGIN
cont> SET :Y = 'Hello';
cont> GET DIAGNOSTICS EXCEPTION 1 :Y = RETURNED_SQLSTATE;
cont> END;
SQL> PRINT :Y;
Y
00000
SQL>
Example 3: Using RETURNED_SQLCODE
SQL> DECLARE :X INTEGER;
SQL> BEGIN
cont> SET :X = 100;
cont> GET DIAGNOSTICS EXCEPTION 1 :X = RETURNED_SQLCODE;
cont> END;
SQL> PRINT :X;
X
0
Example 4: Returning the current connection name
SQL> CONNECT TO 'ATTACH FILENAME mf_personnel' AS 'my_connection';
SQL> DECLARE :conn_name VARCHAR(20);
SQL> BEGIN
cont> GET DIAGNOSTICS :conn_name = CONNECTION_NAME;
cont> END;
SQL> PRINT :conn_name;
CONN_NAME
my_connection
Example 5: Using the TRANSACTION_TIMESTAMP and TRANSACTION_
SEQUENCE options
SQL> set transaction read write;
SQL> show transaction
Transaction information:
Statement constraint evaluation is off
On the default alias
Transaction characteristics:
Read Write
Transaction information returned by base system:
a read-write transaction is in progress
- updates have not been performed
- transaction sequence number (TSN) is 0:256
- snapshot space for TSNs less than 0:256 can be reclaimed
- recovery unit journal filename is USER2:[RDM$RUJ]SCRATCH$00018679B3AD.RUJ;1
- session ID number is 8
SQL>
SQL> declare :x date vms;
SQL>
SQL> begin get diagnostics :x = transaction_timestamp; end;
SQL> print :x;
X
27-MAY-1999 22:39:17.02
SQL>
SQL> declare :y bigint;
SQL>
SQL> begin get diagnostics :y = transaction_sequence; end;
SQL> print :y;
Y
256
SQL>
SQL> select current_timestamp from rdb$database;
27-MAY-1999 22:39:18.20
1 row selected
SQL>
SQL> commit;
Example 6: Using the HOT_STANDBY_MODE and SERVER_IDENTIFICATION
options
SQL> set flags 'trace';
SQL> declare :id, :hsmode char(31);
SQL> begin
cont> get diagnostics :id = SERVER_IDENTIFICATION,
cont> :hsmode = HOT_STANDBY_MODE;
cont> trace :id, :hsmode;
cont> end;
~Xt: Oracle Rdb V7.1 NONE
Example 7: Using the LIMIT_CPU_TIME, LIMIT_ROWS_FETCHED, and
LIMIT_ELAPSED_TIME options
SQL> set flags 'trace';
SQL> set query execution limit elapsed time 10 minutes;
SQL> begin
cont> declare :row_limit integer;
cont> declare :elapsed_limit integer;
cont> declare :cpu_limit integer;
cont> get diagnostics
cont> :cpu_limit = LIMIT_CPU_TIME,
cont> :row_limit = LIMIT_ROWS_FETCHED,
cont> :elapsed_limit = LIMIT_ELAPSED_TIME;
cont> trace 'LIMIT_ROWS_FETCHED: ', :row_limit;
cont> trace 'LIMIT_CPU_TIME: ', :cpu_limit;
cont> trace 'LIMIT_ELAPSED_TIME: ', :elapsed_limit;
cont> end;
~Xt: LIMIT_ROWS_FETCHED: 0
~Xt: LIMIT_CPU_TIME: 0
~Xt: LIMIT_ELAPSED_TIME: 600
SQL>
Example 8: Using the TRACE_ENABLED keyword in a compound
statement
SQL> declare :x integer;
SQL> begin
cont> get diagnostics :x = TRACE_ENABLED;
cont> end;
SQL> print :x;
X
0
SQL> set flags 'trace';
SQL> begin
cont> get diagnostics :x = TRACE_ENABLED;
cont> end;
SQL> print :x;
X
1