试图使用循环将多个值存储到变量中,并且还使用该特定变量进行插入

问题描述 投票:0回答:1

我想编写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 oracle plsql oracle11g oracle-sqldeveloper
1个回答
1
投票

简而言之,您做错了方式,使事情变得过于复杂。一切都可以在一个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';
© www.soinside.com 2019 - 2024. All rights reserved.