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

THE CURSOR CURSOR NAME IS NOT IN A PREPARED STATE

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

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

当我这样做时,我得到了 "THE CURSOR DESC_CSR IS NOT IN A PREPARED STATE"。

任何人都可以帮助我如何准备或纠正我,如果我做错了。

我使用了下面的代码并且工作正常。我能够使用 Dynamic 运行 多个 select。

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 = ?