【发布时间】:2016-11-04 15:07:58
【问题描述】:
我正在使用 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);
这是保存数据的正确方法吗?
【问题讨论】:
-
您的代码似乎没有意义。正如所写,它不应该编译。您对
TA_TABLE_INS的调用传递了集合的一个元素和一个索引。该过程被定义为将t_associative_array作为第一个参数,而不是该集合的元素。您的过程似乎没有对输入参数做任何事情,它只是将 10 个 NULL 值插入到表中。您尚未发布收藏的定义。如果它是关联数组,则您的代码假定它由整数和密集索引。这是可能的,但在关联数组中不太可能。 -
TYPE T_ASSOCIATIVE_ARRAY 是 PLS_INTEGER 的 VARCHAR(4000) 索引表。代码编译,但我知道我做错了什么。我不明白如何将集合的元素插入 TA_TABLE1。我该怎么做?
-
如果是这样定义的,则代码无法编译成功。您将
varchar(4000)传递给TA_TABLE_INS过程。该过程需要t_associative_array。那不会编译。您的收藏只有一个字符串。您的表有 10 列,其中包含多种不同的数据类型。您希望如何获取单个字符串并将其插入到具有 10 列的表中?
标签: arrays oracle plsql associative-array