我的任务是构建一个过程,该过程根据另一个值中的值将值插入到新表中,包括包含不同SELECT语句的字符串的列。
我正在使用的表格包含ID
列,ITEM1
和ITEM2
列以及包含SRC_CODE
列的(SELECT KEY FROM FACT_TABLE WHERE DAY_ID = V_DAY_ID AND some other condition)
列。 ITEM1
。因此,此过程必须在执行之前填充V_DAY_ID变量。将插入到新表中的值将是来自ITEM2
和KEY
列的值,以及来自{中的select语句的关联SRC_CODE
s(数千个结果) {1}}列。在谈到PL / SQL时,我是一个新手,所以我有点失去构建这个过程。
这就是我所说的,即使它不正确,它应该让你知道我想要完成的事情:
CREATE OR REPLACE PROCEDURE METRICS (DAY_ID IN NUMBER)
IS
CURSOR CUR_ITEMS IS
SELECT ID, ITEM1, ITEM2 FROM METRICSTABLE;
CURSOR CUR_SRC_CODE IS
SELECT ID, SRC_CODE FROM METRICSTABLE;
VDAY_ID NUMBER;
V_KEY INTEGER;
BEGIN
VDAY_ID := DAY_ID;
FOR i IN CUR_SRC_CODE LOOP
EXECUTE IMMEDIATE SRC_CODE INTO V_KEY;
END LOOP;
FOR REC IN CUR_ITEM LOOP
INSERT INTO KEY_METRICS (KEY, ITEM1, ITEM2, CRE_DT)
VALUES (V_KEY, ITEM1, ITEM2, SYSDATE);
COMMIT;
END LOOP;
END;
答案 0 :(得分:0)
这完全符合我的要求,感谢所有提示:
CREATE OR REPLACE PROCEDURE POPULATETARGET IS
TYPE KEYS_T IS TABLE OF SOMETABLE.KEY%TYPE;
L_KEYS KEYS_T;
V_DAY NUMBER;
V_SRC_CODE VARCHAR2 (4000);
RC SYS_REFCURSOR;
BEGIN
V_DAY := 20150826;
OPEN RC FOR SELECT SRC_CODE FROM SOURCE;
LOOP
FETCH RC INTO V_SRC_CODE;
EXIT WHEN RC%NOTFOUND;
EXECUTE IMMEDIATE V_SRC_CODE BULK COLLECT INTO L_KEYS USING V_DAY;
FORALL x IN L_KEYS.FIRST..L_KEYS.LAST
INSERT INTO TARGET (KEY, ITEM1, ITEM2)
VALUES((L_KEYS(x)), (SELECT ITEM1 FROM SOURCETBL WHERE SRC_CODE = V_SRC_CODE), (SELECT ITEM2 FROM SOURCETBL WHERE SRC_CODE = V_SRC_CODE));
COMMIT;
END LOOP;
CLOSE RC;
END;