Как вставить значения в таблицу в APEX, используя ПАКЕТ?

#sql #oracle #oracle-apex #apex #oracle-apex-5.1

#sql #Oracle #oracle-apex #apex #oracle-apex-5.1

Вопрос:

Прямо сейчас я вставляю значения в таблицу со значениями insert или update, например:

 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. Обратите внимание, вы получите ряд преимуществ, переместив свой код в пакеты, в том числе: производительность, удобство обслуживания, тестирование, потенциальное повторное использование.

Ответ №1:

Чтобы использовать пакет в форме в apex, просто замените код в вашей форме, где вы вручную выполняете вставку, вызовом package amp; procedure . Замените «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 для таблиц могут создаваться автоматически. Возможно, стоит взглянуть на них. Одним из очень полезных методов, показанных в сгенерированных пакетах, является обнаружение потерянных обновлений с использованием хэша MD5. Это функция, которую легко пропустить, когда приложения пишутся с использованием пакетов.

Комментарии:

1. Большое вам спасибо, это сработало таким образом, но когда я нажимаю создать, строка создается, но в таблице она становится пустой, как будто я вставлял нулевые значения. Скриншот

2. Я решил это, это была небольшая ошибка из моей последовательности в APEX, большое спасибо за вашу помощь. Хорошего дня!

3. Рад слышать, что это сработало 🙂