我试图通过在Aqua Data Studio(版本15.0.11)中运行以下内容,将多行插入到Oracle 11g表中,使用:
BEGIN
FOR i IN 1..700 LOOP
INSERT INTO lims.stock_template (
stock_template_id,
name,
group_id,
version,
version_status,
workflow_id,
amount,
stock_type_id,
aliquot_template_id,
auto_authorise,
reorder_amount
)
VALUES (
lims.sq_stock_template.nextval,
lims.sq_stock_template.currval,
21,
1,
'A',
51881,
0,
103,
2362,
'F',
0
);
END LOOP;
END;
/
但是我收到以下错误:
>[Error] Script lines: 30-30 ------------------------
ORA-00900: invalid SQL statement
Script line 30, statement line 1, column 0
如果我只运行INSERT语句,它可以正常工作,但我希望能够在一个操作中插入多行。
我确信我过去曾经做过类似的事情,但我看不出有什么问题。
任何帮助都非常感激。
由于
答案 0 :(得分:0)
在您的示例中,您包含了一个BEGIN和END子句,该子句将其转换为" Anonymous PL / SQL Block"
http://docstore.mik.ua/orelly/oracle/prog2/ch15_03.htm
在PL / SQL块中,您无法直接执行SQL语句。您必须只使用PL / SQL。请参阅附带的示例。
现在您可以创建一个存储过程来执行插入并使用Script Object to Window As - >执行或执行绑定。请参见下面的屏幕截图。
答案 1 :(得分:0)
在包中的存储过程或存储过程中,您可以做任何您喜欢的事情!
create or replace procedure testMe as
begin
FOR i IN 1..700 LOOP
INSERT INTO lims.stock_template (
stock_template_id,
name,
group_id,
version,
version_status,
workflow_id,
amount,
stock_type_id,
aliquot_template_id,
auto_authorise,
reorder_amount
)
VALUES (
lims.sq_stock_template.nextval,
lims.sq_stock_template.currval,
21,
1,
'A',
51881,
0,
103,
2362,
'F',
0
);
END LOOP;
end;
完全类似于在SQL提示符处键入每一行,从单词开始到单词 end; 。
更可能绊倒你的是底部的斜线。在CLI sqlPlus中,带有分号(;
)的行尾导致它运行该进程,因此:
select 'A' from dual;
分号告诉它执行。
另一方面,如果你输入单词开始,那么它会转换模式并在任何地方接受分号,只是继续将字符串添加到缓冲区。在A BLANK LINE上输入/并返回,它将尝试执行您的代码。
我认为如果删除斜杠,它会很好地执行。