我正在尝试创建一个存储过程,该过程将执行以下操作:
1.从表(DWH_ALM_ST_AUDIT_TRAIL_MAP
)返回选定值并插入变量
1.返回的值是SQL语句的一部分
1.执行生成的SQL语句
我已经测试了在脚本输出中打印,使用DBS_OUTPUT.PUT_LINE
,结果看起来很公平。但是,当我尝试执行过程(而不是打印)时,结果提示成功,但是尽管行匹配条件,也没有进行更新。
为了更好地说明,您可以参考下面的代码和示例数据。
我创建了下面的SQL语句:
create or replace PROCEDURE SP_GET_ROW_NUM
AS
/* cursor used to store multiple rows of values in a variable */
CURSOR ROW_NUM_CUR IS
SELECT ROW_NUM
FROM DWH_ALM_ST_AUDIT_TRAIL_MAP;
CURSOR QUERY_CUR IS
SELECT QUERY
FROM DWH_ALM_ST_AUDIT_TRAIL_MAP;
ROW_t ROW_NUM_CUR%ROWTYPE;
TYPE ROW_ntt IS TABLE OF ROW_t%TYPE;
l_ROW ROW_ntt;
QUERY_t QUERY_CUR%ROWTYPE;
TYPE QUERY_ntt IS TABLE OF QUERY_t%TYPE;
l_QUERY QUERY_ntt;
SQL_STAT VARCHAR2(2000);
BEGIN
OPEN ROW_NUM_CUR;
FETCH ROW_NUM_CUR BULK COLLECT INTO l_ROW;
CLOSE ROW_NUM_CUR;
OPEN QUERY_CUR;
FETCH QUERY_CUR BULK COLLECT INTO l_QUERY;
CLOSE QUERY_CUR;
FOR i IN 1..l_ROW.COUNT LOOP
SQL_STAT := 'UPDATE DWH_ALM_GAP_STRESS_TEST SET ROW_NUM = ' || l_ROW(i).ROW_NUM || ' ' || l_QUERY(i).QUERY || ';' ;
END LOOP;
END SP_GET_ROW_NUM;
这是示例数据:DWH_ALM_ST_AUDIT_TRAIL_MAP
:
| 行数|查询|
| --|--|
| 45 |其中TOP_CONVENTION = 'CAISSE TITRES'且PERIMETRE = 'I.外部|
| 46 |其中TOP_CONVENTION = 'BRUT' AND PERIMETRE = 'II.外部OCAA'|
真的很感激如果有人能在这方面提供建议。
如果需要,我很乐意分享更多。
1条答案
按热度按时间nafvub8i1#
包括缺失的
EXECUTE IMMEDIATE
功能,现在一切都工作得很好!