0
我正在使用oracle,並從C#中獲得關聯數組。在我的PL/SQL包的代碼是:關聯數組循環和調用存儲過程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_TABLE_INS從包裝TA_DATA。在我調用的程序中,我將關聯數組中的數據保存到多個變量中:
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);
這是保存數據的正確方法嗎?
您的代碼似乎沒有什麼意義。正如所寫,它不應該編譯。您對'TA_TABLE_INS'的調用會傳遞該集合的一個元素和一個索引。該過程被定義爲將't_associative_array'作爲第一個參數,而不是該集合的一個元素。你的過程似乎沒有對輸入參數做任何事情,它只是向表中插入10個NULL值。您尚未發佈收藏的定義。如果它是一個關聯數組,則你的代碼假定它是由一個整數和密集索引的。這是可能的,但在關聯數組中不太可能。 –
TYPE T_ASSOCIATIVE_ARRAY是VARCHAR(4000)的索引PLS_INTEGER的索引。代碼編譯,但我做錯了我知道。我不想undestrand如何將集合的元素插入到TA_TABLE1中。我該怎麼做? –
如果這是定義,則代碼無法成功編譯。你正在向'TA_TABLE_INS'過程傳遞'varchar(4000)'。該過程需要一個't_associative_array'。這不會編譯。您的收藏只有一個字符串。你的表格有10列,有許多不同的數據類型。你想如何把一個字符串插入一個10列的表格中? –