【问题标题】:Insert values from a type list PLSQL ORACLE 11从类型列表中插入值 PLSQL ORACLE 11
【发布时间】:2022-08-20 19:04:38
【问题描述】:

谢谢你帮助我。 第一个插入工作正常,但第二个不插入任何东西。你能帮我吗。我正在学习plsql,但仍有一些我不知道的事情。

PROCEDURE PR_INS_INVESTIGATION (
   PIN_INS_INVESTIGATION  IN IN_INS_INVESTIGATION)
IS
   LST_INS_INVESTIGATED  RC_INS_INVESTIGATED;
   EX_NO_DATA            EXCEPTION;
BEGIN
   INSERT INTO PQR076INVESTIGATION (CCPQR076IDINVESTIGATION,
                                    CCPQR076DATE,
                                    CCPQR076AREA,
                                    CCPQR076STATE,
                                    CCPQR076USER)
        VALUES (PIN_INS_INVESTIGATION.IDINVESTIGACION,
                SYSDATE,
                PIN_INS_INVESTIGATION.AREA,
                PIN_INS_INVESTIGATION.STATE,
                USER);

   COMMIT;

   IF     LST_INS_INVESTIGATED IS NOT NULL
      AND LST_INS_INVESTIGATED.COUNT > 0
   THEN
      FOR j IN LST_INS_INVESTIGATED.FIRST .. LST_INS_INVESTIGATED.LAST
      LOOP
         INSERT INTO PQR075INVESTIGATED (CCPQR075IDINVESTIGATION,
                                         CCPQR075NIDENT,
                                         CCPQR075NAME,
                                         CCPQR075USER)
              VALUES (PIN_INS_INVESTIGATION.IDINVESTIGAtION,
                      LST_INS_INVESTIGATED (J).NUMBERID,
                      LST_INS_INVESTIGATED (J).NAME,
                      USER);

         COMMIT;
      END LOOP;
   END IF;
END;

这是我测试程序的方式:

'''

declare
  pin_ins_investigation in_ins_investigation;
begin
  pin_ins_investigation := in_ins_investigation();
  pin_ins_investigation.IDinvestigation := \'1234460\';
  pin_ins_investigation.AREA := \'05\';
  pin_ins_investigation.STATE := \'E\';
  
  pin_ins_investigation.LST_INS_investigated.extend;
  pin_ins_investigation.LST_INS_investigated(1).NUMBERID := \'1014350360\';
  pin_ins_investigation.LST_INS_investigated(1).NAME := \'PETER TOSH\';
  
 
 
  pkg_package.pr_ins_investigation(pin_ins_investigation => pin_ins_investigation);
                                     
end;

'''

    标签: oracle plsql types oracle11g


    【解决方案1】:

    在我看来,这是:

    IF     LST_INS_INVESTIGATED IS NOT NULL
       AND LST_INS_INVESTIGATED.COUNT > 0
    

    永远不会是真的,所以 IF - END IF 块中的任何内容都不会被执行。

    您将其声明为

    LST_INS_INVESTIGATED  RC_INS_INVESTIGATED;
    

    lst_ins_investigated 不包含任何内容,它只是宣布, 绝不人口稠密任何值。一旦你解决了这个问题,代码可能会工作。

    【讨论】:

    • 我更新了关于 lst_ins 调查数据方式的问题。请帮助我,我想也许是我忘记了 lst 的实例化。谢谢
    • 不,它从来没有得到任何数据。 PIN_INS_INVESTIGATION 得到了它,但你没有在程序中使用它,所以这是徒劳的。
    • 你是对的。我刚刚删除了那条线,它起作用了。多谢兄弟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多