Hi!
I'm trying to use ADMIN_CMD procedure in my SQL procedure like this:
DROP PROCEDURE IMPORT_DATA#
CREATE PROCEDURE IMPORT_DATA()
SPECIFIC IMPORT_DATA
MODIFIES SQL DATA
NOT DETERMINISTIC
LANGUAGE SQL
BEGIN ATOMIC
DECLARE DATA_REPL_ON_ST ATUS VARCHAR(10);
DECLARE ROWS_READ INTEGER;
DECLARE ROWS_SKIPPED INTEGER;
DECLARE ROWS_INSERTED INTEGER;
DECLARE ROWS_UPDATED INTEGER;
DECLARE ROWS_REJECTED INTEGER;
DECLARE ROWS_COMMITTED INTEGER;
DECLARE MSG_RETRIEVAL VARCHAR(500);
DECLARE MSG_REMOVAL VARCHAR(500);
DECLARE result1 RESULT_SET_LOCA TOR VARYING;
SELECT STATUS INTO DATA_REPL_ON_ST ATUS FROM PARAMS WHERE CODE
= 'DATA_REPL_ON' WITH UR;
IF (DATA_REPL_ON_S TATUS = '0') THEN
UPDATE PARAMS SET STATUS = '1' WHERE CODE = 'DATA_REPL_ON';
CALL SYSPROC.ADMIN_C MD('IMPORT FROM /home/gregor/TABLE1.IXF OF IXF
MESSAGES ON SERVER INSERT_UPDATE INTO EMGSYS.TABLE1') ;
ASSOCIATE RESULT SET LOCATORS(result 1) WITH PROCEDURE
SYSPROC.ADMIN_C MD;
ALLOCATE rsCur CURSOR FOR RESULT SET result1;
FETCH rsCur INTO ROWS_READ, ROWS_SKIPPED, ROWS_INSERTED,
ROWS_UPDATED, ROWS_REJECTED, ROWS_COMMITTED, MSG_RETRIEVAL, MSG_REMOVAL;
UPDATE PARAMS SET STATUS = '0' WHERE CODE = 'DATA_REPL_ON';
END IF;
END
When I run this I get:
SQL20397W Routine "SYSPROC.ADMIN_ CMD" execution has completed, but at least
one error, "SQL3015", was encountered during the execution. More information
is available.
In db2diag.log I get:
SQL0774N The statement cannot be executed within an ATOMIC compound
SQL statement.
I must use BEGIN ATOMIC, because of the UPDATE against table PARAMS.
Any idea how to solve this ?
Best regards,
Kovi
--
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
| In A World Without Fences Who Needs Gates? |
| Experience Linux. |
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
I'm trying to use ADMIN_CMD procedure in my SQL procedure like this:
DROP PROCEDURE IMPORT_DATA#
CREATE PROCEDURE IMPORT_DATA()
SPECIFIC IMPORT_DATA
MODIFIES SQL DATA
NOT DETERMINISTIC
LANGUAGE SQL
BEGIN ATOMIC
DECLARE DATA_REPL_ON_ST ATUS VARCHAR(10);
DECLARE ROWS_READ INTEGER;
DECLARE ROWS_SKIPPED INTEGER;
DECLARE ROWS_INSERTED INTEGER;
DECLARE ROWS_UPDATED INTEGER;
DECLARE ROWS_REJECTED INTEGER;
DECLARE ROWS_COMMITTED INTEGER;
DECLARE MSG_RETRIEVAL VARCHAR(500);
DECLARE MSG_REMOVAL VARCHAR(500);
DECLARE result1 RESULT_SET_LOCA TOR VARYING;
SELECT STATUS INTO DATA_REPL_ON_ST ATUS FROM PARAMS WHERE CODE
= 'DATA_REPL_ON' WITH UR;
IF (DATA_REPL_ON_S TATUS = '0') THEN
UPDATE PARAMS SET STATUS = '1' WHERE CODE = 'DATA_REPL_ON';
CALL SYSPROC.ADMIN_C MD('IMPORT FROM /home/gregor/TABLE1.IXF OF IXF
MESSAGES ON SERVER INSERT_UPDATE INTO EMGSYS.TABLE1') ;
ASSOCIATE RESULT SET LOCATORS(result 1) WITH PROCEDURE
SYSPROC.ADMIN_C MD;
ALLOCATE rsCur CURSOR FOR RESULT SET result1;
FETCH rsCur INTO ROWS_READ, ROWS_SKIPPED, ROWS_INSERTED,
ROWS_UPDATED, ROWS_REJECTED, ROWS_COMMITTED, MSG_RETRIEVAL, MSG_REMOVAL;
UPDATE PARAMS SET STATUS = '0' WHERE CODE = 'DATA_REPL_ON';
END IF;
END
When I run this I get:
SQL20397W Routine "SYSPROC.ADMIN_ CMD" execution has completed, but at least
one error, "SQL3015", was encountered during the execution. More information
is available.
In db2diag.log I get:
SQL0774N The statement cannot be executed within an ATOMIC compound
SQL statement.
I must use BEGIN ATOMIC, because of the UPDATE against table PARAMS.
Any idea how to solve this ?
Best regards,
Kovi
--
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
| In A World Without Fences Who Needs Gates? |
| Experience Linux. |
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
Comment