如何使用 PACKAGE 向 APEX 中的表插入值?

Posted

技术标签:

【中文标题】如何使用 PACKAGE 向 APEX 中的表插入值?【英文标题】:How to insert values to a table in APEX, using a PACKAGE? 【发布时间】:2022-01-11 21:27:25 【问题描述】:

现在我正在使用插入或更新值向表中插入值,如下所示:

IF     :P903_PYMT_MTH_ID IS NOT NULL

THEN
INSERT INTO "TABLE_NAME" (
                                    PYMT_MTH_ID,
                                    PYMT_MTH_TYPE,
                                    PYMT_MTH_NM,
                                    CRT_DT_TM,
                                    MOD_DT_TM,
                                    USR_NM,
                                    LAST_TXN_DT            
                                      )                                      
VALUES     (
                :P903_PYMT_MTH_ID,
                :P903_PYMT_MTH_TYPE,
                :P903_PYMT_MTH_NM,
                sysdate,
                sysdate,    
                :P903_USR_NM,
                :P903_LAST_TXN_DT
           );
           
           COMMIT;

但现在,在办公室,他们需要使用最近创建的包来完成:

    PROCEDURE P_NEW(PN_PYMT_MTH_ID        NUMBER,
                 PV_PYMT_MTH_TP        VARCHAR2,
                 PV_PYMT_MTH_NM        VARCHAR2,
                 PV_USR_NM             VARCHAR2,
                 PN_RESULTADO          OUT NUMBER) AS
    VN_EXISTE NUMBER := 0;
 BEGIN

   PN_RESULTADO := 0;

   SELECT COUNT(1) INTO VN_EXISTE
      FROM "TABLE_NAME"
     WHERE PYMT_MTH_ID = PN_PYMT_MTH_ID;

如何将原始 apex 页面中的每个输入与包链接?我必须说这是我第一次使用包,所以我在那个领域是全新的。提前致谢。

【问题讨论】:

请注意,通过将代码移动到包中,您将获得许多好处,包括:性能、可维护性、测试、潜在的重用。 【参考方案1】:

要在 apex 中的表单上使用包,只需将您手动插入的表单中的代码替换为调用包和过程即可。将下面的“MYPKG”替换为实际的包名。

DECLARE
  l_out_arg NUMBER;
BEGIN
  MYPKG.P_NEW(PN_PYMT_MTH_ID => :P903_PYMT_MTH_ID,
                 PV_PYMT_MTH_TP => :P903_PYMT_MTH_TYPE,
                 PV_PYMT_MTH_NM => :P903_PYMT_MTH_NM,
                 PV_USR_NM => :P903_USR_NM,
                 PN_RESULTADO => l_out_arg);
END;

变量l_out_arg 可以替换为页面项,以便您可以在流程的成功消息中或在此页面流程之后执行的另一个组件(其他流程、分支)中使用它。

附带说明,因为可以在表上生成 APEX 5.1 包automatically。可能值得一看。生成的包中显示的一项非常有用的技术是使用 MD5 散列进行丢失更新检测。这是使用包编写应用程序时很容易错过的功能。

【讨论】:

非常感谢,它是这样工作的,但是当我单击创建时,该行已创建,但它在表中变为空白,就像我插入 NULL 值一样。 Screenshot 我解决了,我在 APEX 中的序列有点错误,非常感谢您的帮助。祝你有美好的一天! 很高兴听到它成功了 :)

以上是关于如何使用 PACKAGE 向 APEX 中的表插入值?的主要内容,如果未能解决你的问题,请参考以下文章

如何向本地存储帐户中的表编写 LINQ 查询?

将 clob 数据插入不同的表列

如何在 APEX 应用程序的 csv 文件的批量数据插入中使用 forall 语句

Java中写插入语句向数据库中的表插入??

Java中写插入语句向数据库中的表插入??

Apex 数据加载向导完成后如何运行附加进程