【发布时间】:2021-01-29 14:54:02
【问题描述】:
在我正在编写的程序中,我执行了几个步骤。在该过程的先前版本中,多个步骤将数据插入到被误用作临时数据的表中。但是,我插入的数据大于表的最大列大小(NVARCHAR2(2000))。这就是我重写程序以使用 CTE 而不是归档表格的原因。我重写了我用来匹配模板的forloop,如这个问题1 所示。但是,该过程的下一步应使用相同的 CTE 数据。我如何访问这个?如何将代码中“Step8”之后的部分与上面的部分合并?
我的代码的匿名部分:
FOR rec IN (.
WITH ELEMENT_CTE (Row1, Row2, Row3)
AS
(
...
)
,
EXPRESSIONS_CTE(Row1, Row2, Row3, Row4)
AS
(
...
)
SELECT Row1,Row2, Row3, Row4 FROM EXPRESSIONS_CTE )
LOOP
IF rec.Row1 = '3' THEN
EXECUTE IMMEDIATE 'INSERT INTO SCHEMA.CMW_TABLENAMEONE...;
COMMIT;
ELSIF rec.Row1 = '5' THEN
EXECUTE IMMEDIATE 'INSERT INTO SCHEMA.CMW_TABLENAMETWO...;
COMMIT;
END IF;
END LOOP;
-- Step 8
INSERT INTO SCHEMA.CMW_TABLENAMEONE (T1Row1, T1Row2, T1Row3)
SELECT DISTINCT Row1
, Row2
, NULL Row3
FROM EXPRESSIONS_CTE
WHERE Row1 = 3
MINUS
SELECT DISTINCT T1Row1
, T1Row2
, NULL T1Row3
FROM SCHEMA.CMW_TABLENAMEONE
;
【问题讨论】:
-
CTE 的范围仅限于查询。
标签: sql oracle stored-procedures common-table-expression