我为选择创建了动态存储过程。我将通过传递参数来使用此通用查询来执行多选择语句。
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 = ?