Search code examples
stored-proceduresdynamicdb2cobol

THE CURSOR CURSOR NAME IS NOT IN A PREPARED STATE


I created Dynamic Stored procedure for select. I'm going to use this generic query for execute multiple select statement, by passing the parameter.

DECLARE DESC_CSR CURSOR WITH HOLD FOR V_SQL; 

SET V_SELECT =                               
'SELECT ' || SELECT_FIELDS ||                
' FROM '  || TABLE_NAME    ||                
' WHERE ' || WHERE_CLAUSE  ||                
' WITH UR';                                  

PREPARE V_SQL FROM V_SELECT;  
OPEN DESC_CSR;   

I will pass below values.

SELECT_FIELDS = B.COLUMN_A  INTO HOST_VAR_A
TABLE_NAME =  TABLE_A A   INNER JOIN TABLE_B B      
              ON A.ROW_ID = B.ROW_ID
WHERE_CLAUSE = A.COLUMN_B = HOST_VAR_B

When I did this I got "THE CURSOR DESC_CSR IS NOT IN A PREPARED STATE".

Could anyone please help me on how to PREPARE or correct me, if I'm doing it wrong.


Solution

  • I used below code and it working fine. I was able to run multiple select's using Dynamic.

    DECLARE DESC_CSR CURSOR WITH HOLD FOR V_SQL;  
    
      SET V_SELECT =                              
      'SELECT ' || SELECT_FIELDS ||               
      ' FROM '  || TABLE_NAME    ||               
      ' WHERE ' || WHERE_CLAUSE  ||               
      ' WITH UR';                                 
    
    
      PREPARE V_SQL FROM V_SELECT;  
    
      OPEN DESC_CSR USING HOST_VAR_B;
    
      FETCH DESC_CSR INTO HOST_VAR_A;
    

    I pass parm as below. using the where clause HOST_VAR_B as Parameter marker "?" and assigning the field at OPEN.

    SELECT_FIELDS = B.COLUMN_A  INTO HOST_VAR_A
    TABLE_NAME =  TABLE_A A   INNER JOIN TABLE_B B      
                  ON A.ROW_ID = B.ROW_ID
    WHERE_CLAUSE = A.COLUMN_B = ?