Hi,
I have written one procedure . every thing is working fine. But My first loop is entering into infinite loop. I tried to resolve this but unable to get .sorry for posting my code. I am missing something here .
can some one kindly help me out.
CREATE PROCEDURE proc1 ()
DYNAMIC RESULT SETS 5
P1: BEGIN
DECLARE curr_db_name varchar(32672);
DECLARE p_db_name varchar(32672);
DECLARE p_table_name varchar(200);
DECLARE db_name varchar(32672);
DECLARE table_name varchar(200);
DECLARE column_name varchar(200);
DECLARE column_id varchar(200);
DECLARE s_column_type_id varchar(200);
DECLARE encryption_method varchar(20);
DECLARE id_use varchar(240);
DECLARE id_use2 varchar(240);
DECLARE column_length float;
DECLARE dynsqlstr varchar(32672);
DECLARE l_col_specific_str varchar(32672);
DECLARE l_table_specific_set_str varchar(32672);
DECLARE JOB_ID INTEGER;
DECLARE LOG_PROCESS varchar(32672);
DECLARE l_row_count INTEGER;
DECLARE l_error INTEGER;
DECLARE l_column_list varchar(1000);
DECLARE L1 VARCHAR(32672);
DECLARE L2 VARCHAR(32672);
DECLARE TEXT VARCHAR(32672);
DECLARE ENCR_STMT VARCHAR(32672);
DECLARE COL_STMT VARCHAR(32672);
DECLARE ID_STMT VARCHAR(32672);
DECLARE L1_STMT VARCHAR(32672);
DECLARE L2_STMT VARCHAR(32672);
DECLARE STMT2 VARCHAR(32672);
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE l_select_str varchar(1000);
DECLARE l_query varchar(1000);
DECLARE l_from_str varchar(1000);
DECLARE l_join_str varchar(2000);
DECLARE l_where_str varchar(1000);
DECLARE l_groupby_str varchar(1000);
DECLARE l_chunk INTEGER;
DECLARE exitcode INTEGER DEFAULT 0;
-- Declare cursor
DECLARE wo_cursor_orangezi CURSOR WITH RETURN for
select zi.OWNER DB_NAME,zi.MT_NAME TABLE_NAME,total_complex_columns as max_chunk
FROM orangezi as zi, orangezi_counts as zic
WHERE COALESCE(truncate_flag, 'N') = 'N'
and zi.owner = zic.owner
and zi.mt_name = zic.mt_name
and zic.total_rows > 0
order by 1, 2 ;
DECLARE wo_cursor_orangeziC CURSOR WITH RETURN for STMT1;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET exitcode = 1;
--DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
-- Getting Job ID
OPEN wo_cursor_orangezi;
-- Fetching values from First cursor
FETCH FROM wo_cursor_orangezi
INTO
p_db_name,
p_table_name,
m_i;
wloop1:
WHILE (SQLCODE = 0)
DO
--IF (exitcode =1)
--THEN
--LEAVE wloop1;
--END IF;
SET TEXT = ('select zi.OWNER as DB_NAME,zi.MT_NAME as TABLE_NAME,zic.MCL_NAME as COLUMN_NAME,zic.ENCR_METHOD as ENCRYPTION_METHOD,
zic.ID_USE ID_USE,zic.ID_USE2 ID_USE2 FROM orangezi as zi, orangeziC as zic WHERE zic.MT_ID = zi.MT_ID
and zic.orangeC_ID = zi.orangeC_ID and zi.OWNER =''' || p_db_name || ''' and zi.MT_name =''' || p_table_name || '''
and zic.encr_method <> ''SRD'' and ENCR_METHOD <> ''T'' and ENCR_METHOD <> ''Z'' order by sort_order');
PREPARE STMT1 FROM TEXT;
SET l_table = NULL;
OPEN wo_cursor_orangeziC;
-- Fetching values from dynamic cursor
FETCH FROM wo_cursor_orangeziC
INTO db_name,
table_name,
column_name,
encryption_method,
id_use,
id_use2;
SET l_col_specific_str = NULL;
wloop2:
WHILE (SQLCODE = 0 )
DO
-- Fetching function based on Encryption code
SET STMT2 ='set ? = (SELECT l_r FROM orange_u where CODE = ''' || encryption_method ||''')' ;
PREPARE S1 FROM STMT2;
EXECUTE S1 into ENCR_STMT;
set l_col_specific_str = ENCR_STMT;
SET L1= 'set ? =(SELECT LOCATE ('||'''<<COL>>''' || ',''' || l_col_specific_str ||''',1) FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM L1;
EXECUTE S1 into L1_STMT;
-- Replacing column name
IF (L1_STMT > 0 )
THEN
SET STMT2 = 'set ? =(SELECT REPLACE ('''|| l_col_specific_str ||''','|| '''<<COL>>''' || ',''' || COLUMN_NAME ||''') FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM STMT2;
EXECUTE S1 into COL_STMT;
set l_col_specific_str = COL_STMT;
END IF;
SET L2 = 'set ? =(SELECT LOCATE ('||'''<<ID_USE>>''' || ',''' || l_col_specific_str ||''',1) FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM L2;
EXECUTE S1 into L2_STMT;
-- Replacing value for date function
IF (L2_STMT > 0 )
THEN
SET STMT2 = 'set ? =(SELECT REPLACE ('''|| l_col_specific_str ||''','|| '''<<ID_USE>>''' || ',''' || COLUMN_NAME ||''') FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM STMT2;
EXECUTE S1 into ID_STMT;
set l_col_specific_str = ID_STMT;
END IF;
SET l_table = l_table || l_col_specific_str ;
FETCH FROM wo_cursor_orangeziC
INTO db_name,
table_name,
column_name,
encryption_method,
id_use,id_use2;
IF (exitcode = 1)
THEN
LEAVE wloop2;
END IF;
IF (SQLCODE = 0)
THEN
SET l_tabler = l_table || ',';
END IF;
-- Get the next column to work with
---END LOOP loop_over_cursor_orangeziC;
END WHILE;
-- calling update stateorange
--call ZYNSQ(l_tabler,l_i,p_db_name,p_table_name);
-- Cursor left open for client application
---OPEN cursor1;
CLOSE wo_cursor_orangeziC;
FETCH FROM wo_cursor_orangezi
INTO
p_db_name,
p_table_name,
l_chunk;
END WHILE;
--CLOSE wo_cursor_orangeziC;
CLOSE wo_cursor_orangezi;
END P1
error:
wloop1 Infinite loop. can some one tell me how to exit from the first loop.
Thanks
I have written one procedure . every thing is working fine. But My first loop is entering into infinite loop. I tried to resolve this but unable to get .sorry for posting my code. I am missing something here .
can some one kindly help me out.
CREATE PROCEDURE proc1 ()
DYNAMIC RESULT SETS 5
P1: BEGIN
DECLARE curr_db_name varchar(32672);
DECLARE p_db_name varchar(32672);
DECLARE p_table_name varchar(200);
DECLARE db_name varchar(32672);
DECLARE table_name varchar(200);
DECLARE column_name varchar(200);
DECLARE column_id varchar(200);
DECLARE s_column_type_id varchar(200);
DECLARE encryption_method varchar(20);
DECLARE id_use varchar(240);
DECLARE id_use2 varchar(240);
DECLARE column_length float;
DECLARE dynsqlstr varchar(32672);
DECLARE l_col_specific_str varchar(32672);
DECLARE l_table_specific_set_str varchar(32672);
DECLARE JOB_ID INTEGER;
DECLARE LOG_PROCESS varchar(32672);
DECLARE l_row_count INTEGER;
DECLARE l_error INTEGER;
DECLARE l_column_list varchar(1000);
DECLARE L1 VARCHAR(32672);
DECLARE L2 VARCHAR(32672);
DECLARE TEXT VARCHAR(32672);
DECLARE ENCR_STMT VARCHAR(32672);
DECLARE COL_STMT VARCHAR(32672);
DECLARE ID_STMT VARCHAR(32672);
DECLARE L1_STMT VARCHAR(32672);
DECLARE L2_STMT VARCHAR(32672);
DECLARE STMT2 VARCHAR(32672);
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE l_select_str varchar(1000);
DECLARE l_query varchar(1000);
DECLARE l_from_str varchar(1000);
DECLARE l_join_str varchar(2000);
DECLARE l_where_str varchar(1000);
DECLARE l_groupby_str varchar(1000);
DECLARE l_chunk INTEGER;
DECLARE exitcode INTEGER DEFAULT 0;
-- Declare cursor
DECLARE wo_cursor_orangezi CURSOR WITH RETURN for
select zi.OWNER DB_NAME,zi.MT_NAME TABLE_NAME,total_complex_columns as max_chunk
FROM orangezi as zi, orangezi_counts as zic
WHERE COALESCE(truncate_flag, 'N') = 'N'
and zi.owner = zic.owner
and zi.mt_name = zic.mt_name
and zic.total_rows > 0
order by 1, 2 ;
DECLARE wo_cursor_orangeziC CURSOR WITH RETURN for STMT1;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET exitcode = 1;
--DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
-- Getting Job ID
OPEN wo_cursor_orangezi;
-- Fetching values from First cursor
FETCH FROM wo_cursor_orangezi
INTO
p_db_name,
p_table_name,
m_i;
wloop1:
WHILE (SQLCODE = 0)
DO
--IF (exitcode =1)
--THEN
--LEAVE wloop1;
--END IF;
SET TEXT = ('select zi.OWNER as DB_NAME,zi.MT_NAME as TABLE_NAME,zic.MCL_NAME as COLUMN_NAME,zic.ENCR_METHOD as ENCRYPTION_METHOD,
zic.ID_USE ID_USE,zic.ID_USE2 ID_USE2 FROM orangezi as zi, orangeziC as zic WHERE zic.MT_ID = zi.MT_ID
and zic.orangeC_ID = zi.orangeC_ID and zi.OWNER =''' || p_db_name || ''' and zi.MT_name =''' || p_table_name || '''
and zic.encr_method <> ''SRD'' and ENCR_METHOD <> ''T'' and ENCR_METHOD <> ''Z'' order by sort_order');
PREPARE STMT1 FROM TEXT;
SET l_table = NULL;
OPEN wo_cursor_orangeziC;
-- Fetching values from dynamic cursor
FETCH FROM wo_cursor_orangeziC
INTO db_name,
table_name,
column_name,
encryption_method,
id_use,
id_use2;
SET l_col_specific_str = NULL;
wloop2:
WHILE (SQLCODE = 0 )
DO
-- Fetching function based on Encryption code
SET STMT2 ='set ? = (SELECT l_r FROM orange_u where CODE = ''' || encryption_method ||''')' ;
PREPARE S1 FROM STMT2;
EXECUTE S1 into ENCR_STMT;
set l_col_specific_str = ENCR_STMT;
SET L1= 'set ? =(SELECT LOCATE ('||'''<<COL>>''' || ',''' || l_col_specific_str ||''',1) FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM L1;
EXECUTE S1 into L1_STMT;
-- Replacing column name
IF (L1_STMT > 0 )
THEN
SET STMT2 = 'set ? =(SELECT REPLACE ('''|| l_col_specific_str ||''','|| '''<<COL>>''' || ',''' || COLUMN_NAME ||''') FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM STMT2;
EXECUTE S1 into COL_STMT;
set l_col_specific_str = COL_STMT;
END IF;
SET L2 = 'set ? =(SELECT LOCATE ('||'''<<ID_USE>>''' || ',''' || l_col_specific_str ||''',1) FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM L2;
EXECUTE S1 into L2_STMT;
-- Replacing value for date function
IF (L2_STMT > 0 )
THEN
SET STMT2 = 'set ? =(SELECT REPLACE ('''|| l_col_specific_str ||''','|| '''<<ID_USE>>''' || ',''' || COLUMN_NAME ||''') FROM SYSIBM.SYSDUMMY1)';
PREPARE S1 FROM STMT2;
EXECUTE S1 into ID_STMT;
set l_col_specific_str = ID_STMT;
END IF;
SET l_table = l_table || l_col_specific_str ;
FETCH FROM wo_cursor_orangeziC
INTO db_name,
table_name,
column_name,
encryption_method,
id_use,id_use2;
IF (exitcode = 1)
THEN
LEAVE wloop2;
END IF;
IF (SQLCODE = 0)
THEN
SET l_tabler = l_table || ',';
END IF;
-- Get the next column to work with
---END LOOP loop_over_cursor_orangeziC;
END WHILE;
-- calling update stateorange
--call ZYNSQ(l_tabler,l_i,p_db_name,p_table_name);
-- Cursor left open for client application
---OPEN cursor1;
CLOSE wo_cursor_orangeziC;
FETCH FROM wo_cursor_orangezi
INTO
p_db_name,
p_table_name,
l_chunk;
END WHILE;
--CLOSE wo_cursor_orangeziC;
CLOSE wo_cursor_orangezi;
END P1
error:
wloop1 Infinite loop. can some one tell me how to exit from the first loop.
Thanks