游标游标名称未处于准备状态



我为选择创建了动态存储过程。我将通过传递参数来使用此通用查询来执行多选择语句。

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;   

我将传递以下值。

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

当我这样做时,我得到"光标DESC_CSR未处于准备状态"。

如果我做错了,谁能帮我准备或纠正我。

我使用了下面的代码,它工作正常。我能够使用动态运行多个选择。

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;

我按如下方式传递参数。 使用 where 子句HOST_VAR_B 作为参数标记 "?" 并在 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 = ?

最新更新