我想编写pl / sql将多个值存储到一个变量中,并代表那个变量,我要插入在变量中返回的值。但这不起作用-我该怎么办?请帮帮我。我的第一个select语句始终返回12-13行,这些行要存储到vtm
变量中。
declare vtm NUMBER(38);
-- vtm student.gr_number%TYPE;
tab apex_application_global.vc_arr2;
BEGIN
tab := apex_util.string_to_table (vtm);
SELECT s.gr_number into vtm
FROM student s
left join class_time ct on ct.class_id=s.class_id and
instr(s.class_time, ct.class_time) > 0
where upper(trim(ct.class_id)) = upper(trim(:APP_USER)) and s.gr_number is not null
and is_active_flg = 'Y';
dbms_output.put_line(vtm);
for i in vtm..tab.count loop
begin
insert into STUDENT_CLASS_ATTEND(gr_number, student_id, PERIOD_NEXT_DAY_FLG, attend_date, period_start_dt, period_end_dt, PERIOD_DURATION, course_name, class_time, branch_id, shift_id, teacher_id, class_id, marked_by, course_id, class_uid)
values( :P7_GR_NUMBER, :P7_STUDENT_ID, :P7_PERIOD_NEXT_DAY_FLG, to_date(UPPER(:P7_ATTEND_DATE),'DD-MON-YYYY'), :P7_PERIOD_START_DT, :P7_PERIOD_END_DT, :P7_PERIOD_DURATION, :P7_COURSE_NAME, :P7_CLASS_TIME, :P7_BRANCH_ID, :P7_SHIFT_ID, :P7_TEACHER_ID, :P7_CLASS_ID, :v_employee_id, :P7_COURSE_ID, :P7_CLASS_UID
);
exception WHEN NO_DATA_FOUND THEN
dbms_output.put_line('there is no data..');
end;
end loop;
commit;
end;
简而言之,您做错了方式,使事情变得过于复杂。一切都可以在一个SQL语句中完成;不需要数组,循环……什么都没有。
INSERT INTO STUDENT_CLASS_ATTEND (gr_number,
student_id,
PERIOD_NEXT_DAY_FLG,
attend_date,
period_start_dt,
period_end_dt,
PERIOD_DURATION,
course_name,
class_time,
branch_id,
shift_id,
teacher_id,
class_id,
marked_by,
course_id,
class_uid)
SELECT :P7_GR_NUMBER,
:P7_STUDENT_ID,
:P7_PERIOD_NEXT_DAY_FLG,
TO_DATE (UPPER ( :P7_ATTEND_DATE), 'DD-MON-YYYY'),
:P7_PERIOD_START_DT,
:P7_PERIOD_END_DT,
:P7_PERIOD_DURATION,
:P7_COURSE_NAME,
:P7_CLASS_TIME,
:P7_BRANCH_ID,
:P7_SHIFT_ID,
:P7_TEACHER_ID,
:P7_CLASS_ID,
s.gr_number, --> this is what you wanted to put into VTM
:P7_COURSE_ID,
:P7_CLASS_UID
FROM student s
LEFT JOIN class_time ct
ON ct.class_id = s.class_id
AND INSTR (s.class_time, ct.class_time) > 0
WHERE UPPER (TRIM (ct.class_id)) = UPPER (TRIM ( :APP_USER))
AND s.gr_number IS NOT NULL
AND is_active_flg = 'Y';