如何在oracle apex中的报表中使用复选框在表中插入值

时间:2018-11-22 15:19:51

标签: oracle oracle11g oracle-apex oracle-apex-5.1

我有一个表调用 OUTGOING ,其中有很多字段,但是在这种情况下要填充的字段是:

  • FILENUMBER
  • 离职日期
  • 部门

现在我有一个使用sql的报告

 SELECT APEX_ITEM.CHECKBOX2(1,registry.filenumber) "Select",

  INCOMINGREQUESTNOTIFICATION.REQUESTEDFILE as REQUESTEDFILE,
    INCOMINGREQUESTNOTIFICATION.FILENUMBER as FILENUMBER,
    INCOMINGREQUESTNOTIFICATION.REQUESTEDDEPARTMENT as REQUESTEDDEPARTMENT,
    INCOMINGREQUESTNOTIFICATION.REQUESTDATE as REQUESTDATE,

    REGISTRY.STATUS as STATUS 
 from REGISTRY REGISTRY,
    INCOMINGREQUESTNOTIFICATION INCOMINGREQUESTNOTIFICATION 
 where REGISTRY.FILENUMBER(+) =INCOMINGREQUESTNOTIFICATION .FILENUMBER
and INCOMINGREQUESTNOTIFICATION.STATUS ='PENDING'

这很好..我需要的是

  • INCOMINGREQUESTNOTIFICATION.FILENUMBER作为FILENUMBER
  • INCOMINGREQUESTNOTIFICATION.REQUESTEDDEPARTMENT作为REQUESTEDDEPARTMENT
  • 和sysdate

将在课程的相关名称下插入到传出表中。

我有一个pl / sql

 DECLARE
  L_FILENUMBER WWV_FLOW_GLOBAL.VC_ARR2;
BEGIN
  L_FILENUMBER := APEX_APPLICATION.G_F01;
  FOR IDX IN 1 .. L_FILENUMBER.COUNT
  LOOP
    IF L_FILENUMBER(IDX) IS NOT NULL THEN
      INSERT INTO OUTGOING
     (FILENUMBER,OUTGOINGDATE,DEPARTMENT)

VALUES
((to_number(APEX_APPLICATION.G_F01(1)))     
   ,SYSDATE
,to_char(APEX_APPLICATION.G_F02(2))  )

     ;

    END IF;
  END LOOP;
END;

这是行不通的。但是,如果我只留下文件号

DECLARE
  L_FILENUMBER WWV_FLOW_GLOBAL.VC_ARR2;
BEGIN
  L_FILENUMBER := APEX_APPLICATION.G_F01;
  FOR IDX IN 1 .. L_FILENUMBER.COUNT
  LOOP
    IF L_FILENUMBER(IDX) IS NOT NULL THEN
      INSERT INTO OUTGOING
     (FILENUMBER)

VALUES
((to_number(APEX_APPLICATION.G_F01(1)))     

     ;

    END IF;
  END LOOP;
END;

仅插入文件编号fine。全部通过提交按钮完成。

NB:我也尝试将离职日期和部门放入声明语句中,但仍然不起作用

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议您学习如何使用表别名。您写的SELECT由于表名和列名很长而难以阅读;别名肯定会有所帮助。

关于您的问题:说“它不起作用”根本没有帮助。到底什么不起作用?有什么错误吗?如果是这样,哪一个?您是否以调试模式运行页面并检查发生了什么?如果没有,那就这样做。

除此之外,您编写的代码没有多大意义-您正试图再次插入相同的值。例如。 APEX_APPLICATION.G_F01(1)不应该是APEX_APPLICATION.G_F01(IDX)吗?像这样:

begin
  for idx in 1 .. apex_application.g_f01.count
  loop
    if apex_application.g_f01(idx) is not null then
       insert into outgoing 
         (filenumber, 
          outgoingdate, 
          department
         )
         values
         (apex_application.g_f01(idx),
          sysdate,
          apex_application.g_f02(idx)
         );
    end if;
  end loop;
end;

(通过检查页面)检查(表格形式)项目是否真的是您使用过的项目(G_F01G_F02)。如果没有,则必须修复该问题。

我没有使用任何TO_NUMBERTO_CHAR函数;我不知道您是否真的需要它们。即使您没有它们,Oracle也会在可能的情况下执行隐式数据类型转换,但是如果您尝试放置例如将'abc123'转换为NUMBER数据类型列。您没有分享这些信息,所以-我省略了这些信息。如有必要,应用它们。