-1
我正在写一个plsql函数,在这个函数中我想添加一个游标。游标取决于其中一个表的值。 如果我在光标前写了任何东西,它会给我错误。 如何写这个。 以下是我的示例代码。带光标的plsql函数
CREATE OR REPLACE FUNCTION F_ResolveValueExpression(inRowId NUMBER)
RETURN VARCHAR2 IS
isRangeValue PLS_INTEGER;
ExpressionValue VARCHAR2(100);
FinalRangeValue VARCHAR2(100);
g_ExchangeType VARCHAR2(100) := 'BSE';
g_TradeMode VARCHAR2(100) := 'SQUP';
rangeTypeNrageField VARCHAR2(10);
SELECT RANGE_TYPE || ' ' || Range_field
INTO rangeTypeNrageField
FROM Range_Header
WHERE RANGE_ID = inRowId;
CASE rangeTypeNrageField
WHEN 'RL EXCHANGE' THEN
CURSOR c_RangeValueDetails IS
SELECT R.LOV_VALUE LOV_VALUE,
R.RANGE_VAL_TYPE RANGE_VAL_TYPE,
R.RANGE_VALUE RANGE_VALUE
FROM Range_Value_Details R
WHERE R.RANGE_ID = inRowId
AND R.LOV_VALUE = g_ExchangeType;
WHEN 'RL TRDMODE' THEN
CURSOR c_RangeValueDetails IS
SELECT R.LOV_VALUE LOV_VALUE,
R.RANGE_VAL_TYPE RANGE_VAL_TYPE,
R.RANGE_VALUE RANGE_VALUE
FROM Range_Value_Details R
WHERE R.RANGE_ID = inRowId
AND R.LOV_VALUE = g_TradeMode;
END CASE;
BEGIN
FOR i IN c_RangeValueDetails
LOOP
IF i.RANGE_VAL_TYPE = 'R' THEN
ExpressionValue := F_ResolveValueExpression(i.RANGE_VALUE);
ELSE
ExpressionValue := i.RANGE_VALUE;
END IF;
End Loop;
RETURN FinalRangeValue;
END;
如果我提供选择语句之前,它的光标工作。 由我的案例陈述取决于我的选择。 如何做到这一点。 请帮忙。
感谢您的回复......我不能在开始之前声明游标....然后编写我的选择语句,然后在案例中为游标赋值....导致上面的代码只是小样本。 ..我将需要从差异表中获取数据...所以不可能写入加入... – user1515118
@ user1515118 - 是的,我已经用示例更新了我的答案。尽管如此,我仍然认为除了过滤器值之外,两个游标是相同的。如果它们实际上根据范围头数据加入不同的表,那么它会变得更加复杂,并且您可能需要切换到open-fetch-close方法而不是简单的游标for-loop。 –