【问题标题】:Trying to store multiple values into a variable using loop and insertion also using that particular variable尝试使用循环将多个值存储到一个变量中,并使用该特定变量进行插入
【发布时间】:2020-09-23 02:19:44
【问题描述】:

我想编写 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;

查看我要存储到 vtm 中的 gr 图像列表,并通过单击按钮插入所有记录 enter image description here

【问题讨论】:

    标签: sql oracle plsql oracle11g oracle-apex


    【解决方案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';
    

    【讨论】:

    • 我有多个从这个查询返回的值,它返回的几乎 12-13 行,我想存储在 vtm 中,并插入从此类查询中获取的所有返回值作为单个值很好,但对于 12-13 个值,我需要循环 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 不为 NULL AND is_active_flg = 'Y';
    • 兄弟检查图片希望你能理解我的目标是什么点击上面的图片描述来查看在单击按钮过程中插入所需的获取结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2016-01-10
    • 2020-01-06
    • 2022-11-03
    • 2014-12-15
    • 1970-01-01
    相关资源
    最近更新 更多