【问题标题】:ORA-00911: invalid character - When running SQL dumpORA-00911: 无效字符 - 运行 SQL 转储时
【发布时间】:2017-11-21 16:28:23
【问题描述】:

我有一堆需要执行的 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 来获取此转储。

【问题讨论】:

  • 我是 Oracle 的新手。 NUMBER 的第一个参数是什么?长度? @KaushikNayak
  • 而不是NUMBER(*, 0) 使用简单的NUMBER
  • 我这样做了,我得到了同样的信息——完全没有区别。
  • NUMBER(*,0)INTEGER @Kaushik 的意思相同;这是完全有效的语法。
  • @Aborted 我一直在玩弄你的说法,我猜techonthenet.com/oracle/errors/ora00911.php 的选项#2。我得到了和你一样的错误,直到我重新输入了第一行的几行,然后我得到了一个不同的错误。我会从头开始重新输入,然后再试一次。

标签: sql oracle


【解决方案1】:

你应该使用“;”在“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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我会试试这个并报告。
    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多