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

How to insert values to a table in APEX, using a PACKAGE?

现在我正在向 table 插入值,插入或更新值,如下所示:

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;

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

要在 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 哈希的丢失更新检测。这是使用包编写应用程序时很容易错过的功能。