【问题标题】:Browse the values of multiple fields and insert them into the same column浏览多个字段的值并将它们插入同一列
【发布时间】:2021-10-13 23:32:52
【问题描述】:

我正在尝试使用重复行为我的 oracle apex 应用程序创建一个功能。假设我有一个车辆桌。

CREATE TABLE vehicles
(
    brand VARCHAR2(50),
    model VARCHAR2(50),
    comment VARCHAR2(50)
);

我首先创建了一个当前正在运行的 PL/SQL 过程,它复制了用户选择的行 n 次。例如,如果用户有 5 辆相同的车辆,他可以输入“5”,应用程序将插入 5 次相同的车辆,当然主键不同。

我想要实现的是让用户可以在每一行上添加自定义评论。例如,他有 5 辆相同的汽车,每辆都有不同的评论。

这是用户插入汽车时我的程序代码:

FOR i IN 1..:P27_NUMBER_VEHICLES -- this represents the numbers of cars the users want to insert
LOOP
INSERT INTO vehicles(brand, model) 
VALUES(:P27_BRAND, :P27_MODEL);
END LOOP;
END;

这会创建 5 辆相同的车辆,但我希望用户能够在每辆车辆上添加 5 个不同的 cmets,这里是 an example of my insertion form,评论字段根据用户想要插入的数字动态显示

我现在尝试使用注释更新我的程序,我尝试给出一个可以由程序动态更改的名称,我将其命名为:P27_COMMENT_0 / 1 / 2 / 3 / 4 / 5。所以我尝试了添加:P27_COMMENT_ || i(循环的索引)尝试自动浏览不同的字段,这是代码:

BEGIN
FOR i IN 1..:P27_NUMBER_VEHICLES 
LOOP
INSERT INTO vehicles(brand, model, comment) 
VALUES(:P27_BRAND, :P27_MODEL, :P27_COMM_ || i);
END LOOP;
END;

不幸的是,这不起作用。

我希望你们能为我提供解决方案。总结一下,我试图用循环复制一行,但仍然能够为特定列上的每个条目添加一个自定义条目。

不要犹豫,询问更多细节,因为我可能忘记了一些重要的事情。

提前谢谢你,

托马斯

更新

这是它的显示方式,我不能在上面写任何东西:

【问题讨论】:

  • 如何动态生成P27_COMM项目,使用APEX_ITEM吗?
  • 我已经把它变得不那么复杂了,插入最多 10 个项目,所以有 10 个 cmets 字段。这些字段是隐藏的,除非它们满足要求的条件,即:P27_NUMBER_VEHICLE >= 1/2/3/4/..../10。因此,如果用户选择插入 4 个项目,页面上将出现前 4 个评论字段。
  • 那么你不能循环浏览你的项目。提交每个项目,检查它是否不为空,如果满足条件,则进行插入。顺便说一句,检查你的模型不确定你是否想要所有这些重复。
  • 好的,我明白了,谢谢你的回答,如果我的物品是用 APEX_ITEM 动态生成的,你还有其他解决方案吗?
  • 是的,我愿意......

标签: oracle loops plsql oracle-apex procedure


【解决方案1】:

在我看来APEX_ITEM比较好用,如下:

  1. 在您的项目之后添加交互式报表区域或子区域。

  2. 将 IR SQL 查询设置为:

SELECT 
  APEX_ITEM.TEXT(
     p_idx => 1,  
     p_attributes=> 'placeholder="Comment '|| LEVEL ||'"') AS Name
FROM dual
CONNECT BY LEVEL <= TO_NUMBER (:P16_NUM)
;

:P16_NUM 是一个包含要显示的项目数的项目。不要忘记将其添加到 IR 的 Source 部分的 Page Items to Submit

  1. 添加提交按钮。

  2. Processing 中创建一个新的进程并遍历这些项目:

BEGIN
  apex_debug.enable;
  for i in apex_application.g_f01.FIRST..apex_application.g_f01.LAST loop
    apex_debug.info('####### Comment '||i||' '||apex_application.g_f01(i));
  end loop;
END;
  1. 最后是你的INSERT
INSERT INTO vehicles(brand, model, comment)
VALUES(:P27_BRAND, :P27_MODEL, apex_application.g_f01(i));
  1. 当您检查一切正常时,更改流程代码:
BEGIN
    for i in apex_application.g_f01.FIRST..apex_application.g_f01.LAST loop
        INSERT INTO vehicles(brand, model, comment)
        VALUES(:P27_BRAND, :P27_MODEL, apex_application.g_f01(i));
    end loop;
END;

编辑

  1. 选择输入所在的列,在右侧找到Security部分并禁用Escape special characters

【讨论】:

  • 非常感谢您的帮助,我会尝试在我的应用程序上实现它来测试它
  • 请点赞 :D 询问是否有问题
  • 我尝试在我的应用程序上对其进行测试,但出现了一些问题,我的报告在每个单元格上都显示了这个:。其次,我应该在哪里粘贴 INSERT 代码?提前谢谢你,
  • 我添加了第六步(在哪里添加插入......)。是的,它为每一行添加了一个输入 DOM 元素,现在您应该使用一些基本的 CSS 设置这些输入的样式。
  • 检查编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 2022-09-23
  • 2017-05-03
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多