【发布时间】:2020-12-25 02:24:32
【问题描述】:
我正在尝试创建一个从 TableA 中读取 100 个元组的过程。对于从 TableA 检索到的每个元组,它还将使用 student_ID 索引从 TableB 检索相关元组,并将所需的属性添加到内存/记录中。具有新属性的元组将被加载到数据仓库中。在加载之前,它需要检查维度表是否已经包含信息。如果是,那么它只会更新事实表,或者更新两个表。重复所有步骤,直到所有数据都加载到数据仓库中。
下面是我正在构建的代码。
CREATE OR REPLACE PROCEDURE PROJ AS
v_tab_rec varchar2 (100);
v_counter number (5);
v_student_id TableB.student_id%type;
v_studname TableB.studname%type;
v_address TableB.address%type;
v_coursename TableB.coursename%type;
DECLARE
CURSOR c_TableA IS
SELECT * FROM TableA;
v_tab_rec c_TableA%ROWTYPE;
BEGIN
OPEN c_TableA;
v_counter :=1;
WHILE (v_counter <= 500)
LOOP
FETCH c_TableA INTO v_tab_rec;
EXIT WHEN c_TableA%NOTFOUND;
SELECT * FROM v_tab_rec WHERE v_tab_rec.student_id = v_TableB.student_id;
IF v_tab_rec.student_id NOT IN (SELECT * FROM Student) THEN
INSERT INTO Student VALUES (v_tab_rec.student_ID, v_studname, v_address);
ELSIF v_tab_rec.course_id NOT IN (SELECT * FROM Course) THEN
INSERT INTO Course VALUES (v_tab_rec.course_id, v_coursename);
ELSIF v_tab_rec.subject_id NOT IN (SELECT * FROM Subject) THEN
INSERT INTO Subject VALUES (v_tab_rec.subject_id, v_tab_rec.subject_name);
END IF;
END LOOP;
END LOOP;
IF c_tableA%ISOPEN THEN
CLOSE c_tableA;
END IF;
COMMIT;
v_counter := v_counter +100;
END PROJ;
/
【问题讨论】:
-
明白但问题出在哪里?
-
我收到编译错误。不知道语法有没有问题?
标签: plsql tuples cursor fetch procedure