我正在使用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);
这是保存数据的正确方法吗?
答案 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;