【问题标题】:Why won't Oracle SQLPlus run multiple statements? It's stopping at the first semicolon为什么 Oracle SQLPlus 不能运行多个语句?它在第一个分号处停止
【发布时间】:2017-05-23 14:18:28
【问题描述】:

我正在尝试将一些数据插入数据库。见这里:

insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('102', 'TAMI', 'DAWSON', '2632 TAKLI CIRCLE', 'FREDERICTON', 'NB', 'E4C 1X2', 11);
insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('103', 'CURT', 'KNIGHT', '4025 CORNELL COURT', 'HALIFAX', 'NS', 'E2T 1T2', 6);
insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('104', 'JAMAL', 'MELENDEZ', '788 EAST 145TH AVENUE', 'MONCTON', 'NB', 'E4C 1U2', 0);
insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('105', 'IVA', 'MCCLAIN', '6045 MUSKET BALL CIRCLE', 'SUMMIT', 'NB', 'E4T 1J2', 15);
insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('106', 'MIRANDA', 'PARKS', '4469 MAXWELL PLACE', 'GERMANTOWN', 'NB', 'E2H 1S2', 0);
insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('107', 'ROSARIO', 'ELLIOTT', '7578 DANNER AVENUE', 'TRACEY', 'NB', 'E4C 1G2', 5);
insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('108', 'MATTIE', 'GUY', '4390 EVERGREEN STREET', 'LILY', 'NS', 'E2K 1F2', 0);

所以我在我的脚本文件夹中有这个。我用“Get myScript.sql”将它加载到缓冲区中,然后运行它,我得到这个错误:

values ('102', 'TAMI', 'DAWSON', '2632 TAKLI CIRCLE', 'FREDERICTON', 'NB', 'E4C 1X2', 11);
                                                                                         *
ERROR at line 2: 
ORA-00911: invalid character

似乎将分号称为无效字符。如果我一次运行一个语句,即:

insert into membership(mem_num, fname, lname, street, city, prov, postal, balance)
values ('102', 'TAMI', 'DAWSON', '2632 TAKLI CIRCLE', 'FREDERICTON', 'NB', 'E4C 1X2', 11);

然后转到下一个,每个都完美无缺。我只是不能一次运行它们。一次运行它们在别人的机器上运行良好。据我所知,SQLPlus 出于某种原因总是试图将它作为一个语句执行,因此当它在中途遇到分号时会出现错误。有谁知道如何更改它以使其正常工作?

【问题讨论】:

  • 使用@myscript运行文件是否正常?
  • 其实,是的!这很有帮助,谢谢。尽管如此,它肯定应该在缓冲区中工作
  • 你也可以用 begin 和 end 包裹它们;命令将其转换为 plssql 块。这是 sqlplus 的编译问题。

标签: sql oracle sqlplus


【解决方案1】:

SQL*Plus 中的分号表示“我已经完成输入”。去掉分号并在语句行之间放一个 / 来执行缓冲区中的内容。

insert blah
/
insert blah
/

【讨论】:

    【解决方案2】:

    我错了。 SQLPlus 不会直接在缓冲区中获取多个语句。您可以一次将它们全部复制/粘贴,它会一个一个地执行它们,或者您可以使用@myFile.sql 运行脚本文件,但您不能加载多个语句并直接在缓冲区中执行它们:即

    get myFile.sql
    /
    

    【讨论】:

      【解决方案3】:

      我不确定I load it into the buffer with "Get myScript.sql", then run it 是什么意思,或者为什么要在 SQLPlus 中将某些内容加载到缓冲区中,但我一直在运行带有许多插入语句的脚本,没有任何问题。

      您似乎已经有了一个脚本文件,所以只需在您的 SQLPlus shell 中调用它:

      @Get myScript.sql
      

      不需要缓冲。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-27
        • 2020-04-14
        • 1970-01-01
        • 2022-01-07
        • 2018-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多