如何在 PL/SQL 中的触发器后获取复选框的值?

Posted

技术标签:

【中文标题】如何在 PL/SQL 中的触发器后获取复选框的值?【英文标题】:How to get the values of a checkbox in after trigger in PL/SQL? 【发布时间】:2020-05-19 10:33:34 【问题描述】:

我有一个用于在 Oracle Apex 中创建新事件的表单。使用这种形式,我可以很好地创建新事件。但在该表单的底部是一个复选框,用户将在其中指定参与组织活动的俱乐部。

您可以在上图底部看到的复选框的值列表设置为从“club”表中选择“club_name”和“club_id”的 sql 查询。

现在我想做的是在成功创建事件后,需要将带有新创建事件的 id 的已检查俱乐部的 club_id 插入到将每个事件与其组织俱乐部相关联的“club_event”连接表中.因此,为此我想到了在事件表上创建后触发器。但是我找不到如何访问在 plsql 代码中选择的俱乐部的 ID。所以我的问题是我是如何做到的,我将活动与组织俱乐部联系起来的方法是否很好?谢谢你。

根据“Koen”的建议,我尝试通过“Process”来实现它。但我在使我的脚本工作时遇到问题。

DECLARE
    type idarray IS VARRAY(10) OF VARCHAR2(10);
    ids idarray;
BEGIN
    ids := apex_string.split(:P72_CLUBS, ':');
    FOR id IN ids LOOP
        INSERT INTO club_event
        VALUES(id, P72_EVENT_ID);
    END LOOP;
END;

我做错了什么,我该如何解决?

【问题讨论】:

【参考方案1】:

您不需要触发器。请改用页面进程。页面项目的值(我假设是 P1_CLUB)将在页面提交时作为冒号分隔的返回值列表(在您的情况下为 club_id)传递。使用apex_string.split 将冒号分隔的列表转换为 pl/sql 数组。遍历数组并在 clubs 表中插入/更新/删除记录。

【讨论】:

我尝试按照您的建议进行操作,但在编写脚本时遇到问题。我已经更新了我的问题以包含我编写的脚本。你能帮我写那个剧本吗?此外,我通过选择“按下按钮时”作为“创建”和“类型”作为“PL/SQL 函数体”将其写入“服务器端条件”部分。我做得对吗? Hello Samman "PL/SQL Function body" 不适用于页面进程。您确定要选择“页面进程”。这不会在我的一个答复中得到回答,并且不再与原始问题相关。此外,询问后续问题直接针对单个用户,而不是针对 *** 社区。我建议改为发布一个新问题。【参考方案2】:

除了 Koen 的回答之外,如果您想查看事件并且还想使用选中的值填充复选框,则必须为复选框页面项设置以下属性:

    来源 - 类型 = SQL 查询(返回冒号分隔值) SQL 查询 = 从 my_club_to_event_table 中选择 club_id,其中 event_id = :P1_EVENT_ID Used = 始终,替换会话状态中的任何现有值

假设 P1_EVENT_ID 是该页面上的主键页面项。

【讨论】:

以上是关于如何在 PL/SQL 中的触发器后获取复选框的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建在 PL/SQL 中更新后触发的触发器

更新同一表中的值的 PL/SQL 插入和删除触发器

pl sql触发器如何比较触发器中的列值

获取 ORA-06502:PL/SQL:数字或值错误:SQL 触发器中的字符到数字转换错误

PL/SQL:检查触发器中的所有行后运行包

如何从 PL/SQL 中的触发器回滚列