问题
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.
回答1:
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 = ?
来源:https://stackoverflow.com/questions/62288861/the-cursor-cursor-name-is-not-in-a-prepared-state