/
в 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
Вы можете ясно видеть, как DROP TABLE
выполняется из-за точки с запятой, и как /
выполняет его снова.