![]() |
|
Archives of the TeradataForumMessage Posted: Wed, 29 Apr 2009 @ 20:20:04 GMT
I am attempting to trap the SQLSTATE for SQLCODE error 5321. I looked it up in the mapping, but could not find it. Therefore, I am running a proc and deliberately allowing the error. However, my error handler is not trapping it. I continue to see the error message at the bottom of SQL Assistant instead. Is this due to the fact that the sql is executed using DBC.SysExecSql? Is there anyway to make this work? Thank you
REPLACE PROCEDURE STORED_PROCSD.RECREATE_UNIQUE_INDEXES
(IN in_database CHAR(30), IN in_table CHAR(30))
/***************************************************************************
* This is designed to be called after using CAPTURE_UNIQUE_INDEXES *
****************************************************************************
/
BEGIN
L1: BEGIN
/******************************** error handling ************************************
* It is possible that this procedure is rerun after the calling process initially *
* fails This may leave some of the indexes created and some not so *
* the process simply moves to the next CREATE statement *
****************************************************************************************/
DECLARE CONTINUE HANDLER
FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
INSERT INTO DBCMNGR.Proc_Error_Table
(:SQLSTATE, CURRENT_TIMESTAMP, 'Indexes already exist','Failed to index. Job may have restarted.');
FOR fCreateIndex AS c_all_columns CURSOR FOR
-- The sql for the cursor
SELECT
'CREATE UNIQUE INDEX ' || TRIM(INDEXNAME)
|| ' (' || TRIM(COLUMNLIST)
|| ') ON ' || TRIM(DATABASENAME) || '.' || TRIM(TABLENAME) as the_statement
FROM
DBCMNGR.INDEXSTORAGE
WHERE
TRIM(DATABASENAME) = in_database
AND TRIM(TABLENAME) = in_table
-- Process the data
DO
-- Potential trouble spot
CALL DBC.SYSEXECSQL (fCreateIndex.the_statement);
END FOR; -- End of process
END L1;
-- Empty the storage table of references to the indexes
L2: BEGIN
DECLARE v_createstatement VARCHAR(300);
DELETE
FROM
DBCMNGR.INDEXSTORAGE
WHERE
TRIM(DATABASENAME) = in_database
AND TRIM(TABLENAME) = in_table
;
END L2;
END;
Vincent Bernard
| ||||||||||||||||||||||||||||||||||||||||||||||||
| | ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
| Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||