ORA-00911:无效字符 - 运行SQL转储时

时间:2017-11-21 16:28:23

标签: sql oracle

我有一堆SQL需要执行,但是Oracle抱怨这个错误:

Error Message : ORA-00911: invalid character
Position      : 27
Statement     : (dump below)

我不确定是什么原因造成的。我已经尝试在最后删除分号,正如一些答案所暗示的那样,但这并没有成功。我正在尝试使用DB::unprepared()方法在Laravel 5.2上运行此SQL转储,如下所示:

DB::connection('oracle')->unprepared(File::get(base_path('/path/to/oracle_dump.sql')));

这是我正在尝试运行的SQL:

DROP TABLE "MYUSERNAME"."POSTS";
DROP SEQUENCE "MYUSERNAME"."POST_SEQ";
CREATE TABLE POSTS
(
  ID NUMBER(*, 0) NOT NULL, TITLE VARCHAR2(1000 BYTE), CONSTRAINT SYS_C004109 PRIMARY KEY(ID)
  USING INDEX
  (
      CREATE UNIQUE INDEX SYS_C004109 ON POSTS (ID ASC)
      LOGGING
      TABLESPACE TEST_TABLSPACE
      PCTFREE 10
      INITRANS 2
      STORAGE
      (
        INITIAL 65536
        NEXT 1048576
        MINEXTENTS 1
        MAXEXTENTS UNLIMITED
        BUFFER_POOL DEFAULT
      )
      NOPARALLEL
  )
  ENABLE
)
LOGGING
TABLESPACE TEST_TABLSPACE
PCTFREE 10
INITRANS 1
STORAGE
(
  INITIAL 65536
  NEXT 1048576
  MINEXTENTS 1
  MAXEXTENTS UNLIMITED
  BUFFER_POOL DEFAULT
)
NOPARALLEL
CREATE SEQUENCE POST_SEQ INCREMENT BY 1 MAXVALUE 9999999999999999999999999999 MINVALUE 1 CACHE 20
CREATE TRIGGER POST_BIR
BEFORE INSERT ON posts
FOR EACH ROW

BEGIN
SELECT post_seq.NEXTVAL
INTO :new.id
FROM dual;
END;

我在Mac上使用SQLDeveloper来获取此转储。

2 个答案:

答案 0 :(得分:4)

你应该使用&#34 ;;"在文件" oracle_dump.sql"。

中的每个语句之后
DROP TABLE "MYUSERNAME"."POSTS";
DROP SEQUENCE "MYUSERNAME"."POST_SEQ";
CREATE TABLE POSTS
(
  ID NUMBER(*, 0) NOT NULL, TITLE VARCHAR2(1000 BYTE), CONSTRAINT SYS_C004109 PRIMARY KEY(ID)
  USING INDEX
  (
      CREATE UNIQUE INDEX SYS_C004109 ON POSTS (ID ASC)
      LOGGING
      TABLESPACE TEST_TABLSPACE
      PCTFREE 10
      INITRANS 2
      STORAGE
      (
        INITIAL 65536
        NEXT 1048576
        MINEXTENTS 1
        MAXEXTENTS UNLIMITED
        BUFFER_POOL DEFAULT
      )
      NOPARALLEL
  )
  ENABLE
)
LOGGING
TABLESPACE TEST_TABLSPACE
PCTFREE 10
INITRANS 1
STORAGE
(
  INITIAL 65536
  NEXT 1048576
  MINEXTENTS 1
  MAXEXTENTS UNLIMITED
  BUFFER_POOL DEFAULT
)
NOPARALLEL;

CREATE SEQUENCE POST_SEQ INCREMENT BY 1 MAXVALUE 9999999999999999999999999999 MINVALUE 1 CACHE 20;

CREATE TRIGGER POST_BIR
BEFORE INSERT ON posts
FOR EACH ROW

BEGIN
SELECT post_seq.NEXTVAL
INTO :new.id
FROM dual;
END;

答案 1 :(得分:1)

尝试在单独的文件中执行每个语句,并且不要使用“;”关闭语句一旦你有文件

文件“oracle_dump.sql”中有5条语句。如果要使用如下命令运行它们,请为每个文件分别创建一个文件:

DB::connection('oracle')->unprepared(File::get(base_path('/path/to/<<file>>')));