我需要复制选定的行值并存储为新记录。我正在使用 Oracle Apex 4.2 和表格形式。我需要使用复选框来选择行和按钮副本。当我选择多行然后单击复制按钮将所有选定的行值复制为新行并保存时。
谁能帮忙
我需要复制选定的行值并存储为新记录。我正在使用 Oracle Apex 4.2 和表格形式。我需要使用复选框来选择行和按钮副本。当我选择多行然后单击复制按钮将所有选定的行值复制为新行并保存时。
谁能帮忙
通过 Oracle APEX 表格形式从单个表中克隆现有记录的想法不会对您可以通过 APEX 向导为页面区域内容设置的默认设计产生太大干扰。
建立一个具有独立主键的表。
建议包括两个辅助列:COPY_REQUEST
和COPIED_FROM
用于运行复制操作。特定的表单元素将映射到要设置的表格表单上的这些列。
构建一个可以读取需要复制哪些记录的 Oracle 存储过程。每次SUBMIT
按下按钮时都会调用此过程。
(可选)如果没有要处理的内容(即,没有标记为复制的记录),考虑包括对步骤 (3) 的抑制。
提示:如果您使用标准的表创建向导,您将有一个更轻松的时间。指定CUSTOMER_ID
为 PRIMARY_KEY 并让 APEX 在顶部创建其标准自动递增功能。(序列加触发器设置。)
这是我使用的示例数据......虽然没关系。您可以输入自己的值并能够轻松验证发生的事情。
此过程一次处理 1 条或多条记录,并在COPY_REQUEST
表中具有特殊标识符。任务完成后,程序会清理并再次重置请求值。
create or replace procedure proc_copy_me_request is
c_request_code CONSTANT char(1):= 'Y';
cursor copy_cursor is
SELECT cme.CUSTOMER_ID, cme.CUSTOMER_NAME, cme.CITY, cme.COUNTRY,
cme.COPY_REQUEST
FROM copy_me cme
WHERE cme.COPY_REQUEST = c_request_code
FOR UPDATE OF cme.COPY_REQUEST;
BEGIN
FOR i in copy_cursor LOOP
INSERT INTO copy_me (customer_name, city, country, copied_from)
VALUES (i.customer_name, i.city, i.country, i.customer_id);
UPDATE copy_me
SET copy_request = null
WHERE CURRENT OF copy_cursor;
END LOOP;
COMMIT;
END proc_copy_me_request;
还有一列可以隐藏。它跟踪记录最初是从哪里复制的。
请注意,光标使用
FOR UPDATE OF
andWHERE CURRENT OF
表示法。这很重要,因为该过程正在更改它所引用的记录。
设置标准FORM
类型页面并选择TABULAR FORM
样式。按照设置说明进行操作,注意映射正确的主键,以及在上述步骤中使用表创建的 PK 序列对象。
完成这些步骤后,您的页面设置如下所示:
编辑COPY_REQUEST
表单值:
编辑COPIED_FROM
表单值:在列属性部分下,将显示为选项更改为“显示为文本(保存状态)”。这只是为了防止用户踩到这个只读字段。如果知道不重要,你也可以压制它。
创建一个新进程: 执行复制过程
这是同一个配置页面的底部,有很少的东西可以更改或添加:
下面的第一个屏幕截图是在页面整理和复选框控件到位之前。
插入一些测试数据并尝试一下。在上述步骤中创建的页面进程有条件地调用存储过程,该存储过程处理在SUBMIT
选择表单按钮时同时发出的所有复制请求。
评论: 如果您花足够的时间修补 Oracle APEX 中的内置向导,就有机会学习与该工具兼容的新设计模式和流程。调整你的方法可以减少额外的工作量和挫败感。