【问题标题】:How to use checkbox in a report in oracle apex to insert values in a table如何在 oracle apex 的报告中使用复选框在表中插入值
【发布时间】:2019-04-25 07:35:36
【问题描述】:

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

  • 文件编号
  • 截止日期
  • 部门

现在我有一个带有 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
  • 和系统日期

当然要以相关名称插入传出表中。

我有一个 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;

它只插入文件号就好了。这一切都是通过提交按钮完成的。

注意:我也尝试在声明语句中输入传出日期和部门,但它仍然不起作用

【问题讨论】:

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


    【解决方案1】:

    我建议您学习如何使用表别名。 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 数据类型列中。你没有分享这些信息,所以我把这些都漏掉了。必要时应用它们。

    【讨论】:

    • (1) 在您的第一点上注明(别名)... (2) 通过说“它不工作”我得到“没有找到数据” (3)它是一个带有选择的报告复选框(不是表格形式)。我刚接触 oracle 才 7 个月,所以我边走边学……我尝试了你的代码,但没有找到任何数据
    • 当我删除 apex_application.g_f02(idx) 时,我得到了文件号和要插入的系统日期。所以我想我应该有一个 rowid 复选框,它应该选择整行并插入它......我不知道,但如果是这样,你能告诉我正确的声明吗
    • 为什么要使用report来插入数据?使用交互式网格(或我之前提到的表格形式) - 它们旨在用于插入数据。从 NO_DATA_FOUND 开始:如果 g_fxx 不包含任何内容,则会引发此问题。您是否检查过是否正确使用了 g_fxx(通过检查页面元素)?
    • 我编辑了上述问题以包含页面图片。我改为交互式网格。你能从中看出问题吗?
    • 除了看到交互式网格之外,不 - 抱歉,我没有看到任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多