关联数组循环和调用存储过程PL / SQL

时间:2016-11-04 15:07:59

标签: arrays oracle plsql associative-array

我正在使用oracle,我从C#获得了一个关联数组。我的pl / sql包中的代码是:

    PROCEDURE SG_DATA_ARRAY (PROVA IN T_ASSOCIATIVE_ARRAY, P_RESULT OUT VARCHAR2) AS 

    BEGIN

    SAVEPOINT SP1;

    FOR indx IN 1..PROVA.count
    LOOP
        TA_DATA.TA_TABLE_INS (PROVA(indx), INDX);
    END LOOP;

    P_RESULT:='SUCCESS INS';

    EXCEPTION
       WHEN OTHERS THEN
         ROLLBACK TO SAVEPOINT SP1;

           P_RESULT:='ERROR INS';

    END SG_DATA_ARRAY; 

我正在做一个关联数组的循环,然后从包TA_DATA中调用我的存储过程TA_TABLE_INS。在我调用的过程中,我将来自关联数组的数据保存到几个变量中:

    PROCEDURE TA_TABLE_INS (PROVA IN T_ASSOCIATIVE_ARRAY, P_DESCR IN NUMBER) AS

      P_ID_TMS NUMBER;

      D1 NVARCHAR2 (20);
      DESCRIPTION NVARCHAR2 (255);
      D3 NVARCHAR2(20);
      D4 NVARCHAR2 (255);
      D5 NVARCHAR2(1000);
      D6_REV_N NUMBER;
      D7_REV_N NUMBER;
      D8 NVARCHAR2(20);
      D9 NVARCHAR2(1000);
      D10 NUMBER;

      INSERT INTO TA_TABLE1 
      VALUES (D1, D2, D3, D4, D5, D6, D7, D8, D9, D10);

这是保存数据的正确方法吗?

1 个答案:

答案 0 :(得分:0)

您的第二个程序TA_TABLE_INS不是必需的。您可以使用批量插入而不是将关联数组行传递给过程。

希望,下面的代码将有所帮助

PROCEDURE SG_DATA_ARRAY (PROVA IN T_ASSOCIATIVE_ARRAY, P_RESULT OUT VARCHAR2) AS 
BEGIN

  SAVEPOINT SP1;

  INSERT INTO TA_TABLE1 
  SELECT SEQUENCE.NETXVAL, --You may use a seq number instead of your prova associative array order 
         tmp.d1, tmp.d2, tmp.d3, 
    FROM TABLE(CAST(PROVA AS T_ASSOCIATIVE_ARRAY) tmp; -- You can directly cast an associative array into a table    


  P_RESULT:='SUCCESS INS';

  EXCEPTION
     WHEN OTHERS THEN
       ROLLBACK TO SAVEPOINT SP1;

         P_RESULT:='ERROR INS';

END SG_DATA_ARRAY;