为什么Oracle SQLPlus不会运行多个语句?它在第一个分号处停止

时间:2017-05-23 14:18:29

标签: sql oracle sqlplus

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

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由于某种原因总是试图将它作为一个语句执行,因此当它在分号中通过分号时会出现错误。有谁知道如何更改它以使其正常工作?

3 个答案:

答案 0 :(得分:0)

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

insert blah
/
insert blah
/

答案 1 :(得分:0)

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

get myFile.sql
/

答案 2 :(得分:0)

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

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

@Get myScript.sql

无需缓冲。