【发布时间】:2017-06-18 13:47:05
【问题描述】:
我已经使用来自游标的信息填充了一个关联数组,现在我想将关联数组信息插入到一个表中。这怎么可能?考虑关联数组是从记录创建的。
SET SERVEROUTPUT ON
DECLARE
TYPE rec_depts_info IS RECORD(
v_dept_id departments.department_id%TYPE,
v_dept_name departments.department_name%TYPE);
TYPE typ_depts_info IS TABLE OF rec_depts_info
INDEX BY PLS_INTEGER;
CURSOR cur_depts_info_1
IS
SELECT department_id, department_name
FROM departments
WHERE department_id IS NOT NULL
AND department_name IS NOT NULL;
t_depts_info_1 typ_depts_info;
rec_depts_info_1 rec_depts_info;
v_counter_1 PLS_INTEGER := 1;
v_counter_2 PLS_INTEGER := 1;
BEGIN
v_counter_1 := v_counter_1 + 1;
FOR depts_info IN cur_depts_info_1
LOOP
t_depts_info_1(v_counter_1).v_dept_id := depts_info.department_id;
t_depts_info_1(v_counter_1).v_dept_name := depts_info.department_name;
EXIT WHEN cur_depts_info_1%NOTFOUND;
END LOOP;
LOOP
INSERT INTO tabla_pruebas
VALUES(t_depts_info_1(v_counter_2).v_dept_id,
t_depts_info_1(v_counter_2).v_dept_name)
RETURNING column_1, column_2
INTO rec_depts_info_1.v_dept_id, rec_depts_info_1.v_dept_name;
DBMS_OUTPUT.PUT_LINE('DEPT ID: ' || rec_depts_info_1(v_counter_2).v_dept_id
|| ' DEPT NAME: ' ||
rec_depts_info_1(v_counter_2).v_dept_name);
v_counter_2 := v_counter_2 + 1;
EXIT WHEN SQL%NOTFOUND;
END LOOP;
END;
我正在尝试使用简单的 LOOP 将数据插入新表中,但收到以下错误:
Informe de error -
ORA-06550: line 51, column 41:
PLS-00222: no function with name 'REC_DEPTS_INFO_1' exists in this scope
ORA-06550: line 51, column 5:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
谢谢!!!
【问题讨论】:
-
您对 PLS-0222 错误的解释是什么?
-
你试图在这里使用记录作为数组
rec_depts_info_1(v_counter_2).v_dept_id。选项:使用正确的数组t_depts_info_1(v_counter_2).v_dept_id或记录rec_depts_info_1.v_dept_id -
谢谢,但现在我收到“NO DATA FOUND”错误。
-
这是
v_counter_1以 2 开头而第二个计数器以 1 开头的结果。为什么在循环外递增v_counter_1? -
对索引表更好地使用批量操作(选择和插入)。那段代码的真正目的是什么?
标签: sql oracle plsql associative-array insert-into