Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 架构创建脚本中的错误_Sql_Oracle_Plsql_Sqlplus - Fatal编程技术网

Sql 架构创建脚本中的错误

Sql 架构创建脚本中的错误,sql,oracle,plsql,sqlplus,Sql,Oracle,Plsql,Sqlplus,因此,我有一个简单的SQL脚本,它创建了一个简单库在线目录的数据库模式: DROP TABLE book_copies; / DROP TABLE books_authors_xref; / DROP TABLE authors; / DROP TABLE books; / CREATE TABLE books ( isbn VARCHAR2(13) NOT NULL PRIMARY KEY, title VARCHAR2(200), summary VARCHAR2(

因此,我有一个简单的SQL脚本,它创建了一个简单库在线目录的数据库模式:

DROP TABLE book_copies;
/
DROP TABLE books_authors_xref;
/
DROP TABLE authors;
/
DROP TABLE books;
/

CREATE TABLE books (
    isbn VARCHAR2(13) NOT NULL PRIMARY KEY,
    title VARCHAR2(200),
    summary VARCHAR2(2000),
    date_published DATE,
    page_count NUMBER
);
/

CREATE TABLE authors (
    name VARCHAR2(200) NOT NULL PRIMARY KEY
);
/

CREATE TABLE books_authors_xref (
    author_name VARCHAR2(200),
    book_isbn VARCHAR2(13),
    CONSTRAINT pk_books_authors_xref PRIMARY KEY (author_name, book_isbn),
    CONSTRAINT fk_books_authors_xref1 FOREIGN KEY (author_name) REFERENCES authors (name),
    CONSTRAINT fk_books_authors_xref2 FOREIGN KEY (book_isbn) REFERENCES books (isbn)
);
/

CREATE TABLE book_copies (
    barcode_id VARCHAR2(100) NOT NULL PRIMARY KEY,
    book_isbn VARCHAR2(13),
    CONSTRAINT fk_book_copies FOREIGN KEY (book_isbn) REFERENCES books (isbn)
);
/
每当我通过SQL*Plus运行它时,即使看起来所有SQL命令都正确执行,但在执行过程中也会出现许多错误。这是我得到的输出:


这是什么意思?我做错什么了吗?

SQL*Plus中的
/
执行“缓冲区中的命令”。执行以分号结尾的语句并将其放入缓冲区

因此,
CREATE TABLE books….
实际上运行了两次。第一次是因为分号
(将语句放入缓冲区)和第二次解析器点击
/

这就是为什么会出现“名称已被使用”错误

因此,您需要使用分号斜杠,但不能同时使用两者

编辑
在以下日志中,您可以看到使用这两种方法手动运行语句时发生的情况,我将第一条语句从脚本复制并粘贴到SQL*Plus控制台:

SQL> DROP TABLE book_copies; Table dropped. SQL> / DROP TABLE book_copies * ERROR at line 1: ORA-00942: table or view does not exist SQL>删除表簿副本; 桌子掉了。 SQL>/ 放下桌上的书 * 第1行错误: ORA-00942:表或视图不存在
您可以清楚地看到,由于分号的缘故,
删除表是如何执行的,以及
/
是如何再次执行的。

SQL*Plus中的
/
执行“缓冲区中的命令”。执行以分号结尾的语句并将其放入缓冲区

因此,
CREATE TABLE books….
实际上运行了两次。第一次是因为分号
(将语句放入缓冲区)和第二次解析器点击
/

这就是为什么会出现“名称已被使用”错误

因此,您需要使用分号斜杠,但不能同时使用两者

编辑
在以下日志中,您可以看到使用这两种方法手动运行语句时发生的情况,我将第一条语句从脚本复制并粘贴到SQL*Plus控制台:

SQL> DROP TABLE book_copies; Table dropped. SQL> / DROP TABLE book_copies * ERROR at line 1: ORA-00942: table or view does not exist SQL>删除表簿副本; 桌子掉了。 SQL>/ 放下桌上的书 * 第1行错误: ORA-00942:表或视图不存在
您可以清楚地看到由于分号的缘故,
下拉表是如何执行的,以及
/
是如何再次执行的。

我应该使用什么?分号还是斜杠?我更喜欢使用分号,因为这使脚本更易于移植。但是,当您运行此程序的唯一环境是SQL*Plus时,它实际上没有什么区别。我更喜欢斜杠-这样,如果您添加任何PL/SQL块,如触发器、包或过程,您将需要一个尾随“/”来创建它们。我应该使用什么?分号还是斜杠?我更喜欢使用分号,因为这使脚本更易于移植。但是,当您运行此程序的唯一环境是SQL*Plus时,它并没有真正的区别。我更喜欢斜杠-这样,如果您添加任何PL/SQL块,如触发器、包或过程,您将需要一个尾随“/”来创建它们。