Plsql ORA-00900:使用循环插入行时SQL语句无效

Plsql ORA-00900:使用循环插入行时SQL语句无效,plsql,oracle11g,Plsql,Oracle11g,我试图通过在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_

我试图通过在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语句本身,它就可以正常工作,但我希望能够在一个操作中插入多行

我确信我在过去也做过类似的事情,但我看不出问题出在哪里

非常感谢您的帮助


谢谢在您的示例中,您包含了一个BEGIN和END子句,该子句将其转换为“匿名PL/SQL块”

在PL/SQL块中,不能直接执行SQL语句。您必须只使用PL/SQL。见附例


现在,您可以创建一个存储过程来执行insert,并使用脚本对象将窗口设置为->执行或执行绑定。请参见下面的屏幕截图。

在存储过程或包中的存储过程中,您可以执行任何您喜欢的操作

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提示符下键入从单词开始到单词结束的每一行类似

更可能绊倒你的是底部的斜线。在CLI sqlPlus中,带有分号(
)的行尾会使其运行进程,因此:

select 'A' from dual;
分号指示它执行

另一方面,如果您键入单词begin,则它会切换模式,并在任何地方接受分号,只需将字符串添加到缓冲区即可。在空白行中键入/并返回,它将尝试执行您的代码


我认为如果删除斜杠,它将执行得非常好。

不正确。。。我总是这么做!