我正在尝试在表中插入18000个值,对于order_id列,该值将增加1,对于其余列,只需插入select返回的内容即可。 当我尝试运行查询时,它将返回存储该值的变量,该变量似乎为null。
这是我尝试过的:
DECLARE
order_id1 number := 1;
OrderID VARCHAR2(100);
i number := 1;
begin
WHILE i < 18000 LOOP
INSERT INTO Dummy_Table
SELECT OrderID,
CREATION_DATE,
email,
FIRST_NAME,
FIX_NO,
mobile_no,
SECOND_NAME,
SECOND_PHONE_NO,
TITLE
from Dummy_Table
i := i + 1;
OrderID := 'ABC' || to_char(order_id1 + 1);
END LOOP;
END;
在OrderID变量中存储了我希望以1递增的字符串,并将其插入到dummy_Table的order_id列中。
错误消息是:
ORA-01400无法将null插入(“ Dummy_Table”。“ order_id” 在第11行
答案 0 :(得分:1)
您声明了orderID但未设置值
然后您尝试插入此空值(此处发生错误)
然后您为orderID设置一个值
交换操作顺序(分配在插入上方),以便在首次尝试插入操作之前为它提供一个值,或者像在其他两个变量中一样,在声明部分为orderID提供初始值>
顺便说一句,我相信这段代码只会插入17999个值,比您的“我的表中需要18000个值”少了
答案 1 :(得分:1)
似乎因为您仅在循环结束时分配了一个值。在第一次迭代中,OrderId始终为null。您必须在运行insert语句之前分配一个值。
While
OrderId := 'ABC' || to_char(order_id);
Insert ...;
order_id ++;
答案 2 :(得分:0)
public IEnumerator GetEnumerator()
{
yield return data[0];
yield return data[1];
yield return data[2];
yield return data[3];
yield return data[4];
}
在循环的第一次迭代中为null。
您可能要初始化OrderID
:
OrderID
,或在插入之前分配一个值:
OrderID VARCHAR2(100) := 'ABC1'
,或者您可以摆脱两个OrderID := 'ABC' || to_char(order_id1 + 1);
order_id1:= order_id1 +1; -- you didn't increment order_id1 for some reason
INSERT INTO Dummy_Table
和OrderID
变量:
order_id1
,或者您可以generate a list of numbers并一次插入所有记录,而无需使用循环:
INSERT INTO Dummy_Table
SELECT 'ABC'||i,
CREATION_DATE,
email,
FIRST_NAME,
FIX_NO,
mobile_no,
SECOND_NAME,
SECOND_PHONE_NO,
TITLE
from Dummy_Table;
i:=i+1;