Saya tahu ini adalah utas lama, tetapi saya baru saja menemukannya dan saya merasa ini belum dijelaskan sepenuhnya.
Ada perbedaan besar dalam SQL*Plus antara arti dari /
dan ;
karena cara kerjanya berbeda.
;
mengakhiri pernyataan SQL, sedangkan /
mengeksekusi apa pun yang ada di "buffer" saat ini. Jadi ketika Anda menggunakan ;
dan sebuah /
pernyataan sebenarnya dieksekusi dua kali.
Anda dapat dengan mudah melihatnya menggunakan /
setelah menjalankan pernyataan:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options
SQL> drop table foo;
Table dropped.
SQL> /
drop table foo
*
ERROR at line 1:
ORA-00942: table or view does not exist
Dalam hal ini orang benar-benar memperhatikan kesalahannya.
Tetapi dengan asumsi ada skrip SQL seperti ini:
drop table foo;
/
Dan ini dijalankan dari dalam SQL*Plus maka ini akan sangat membingungkan:
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options
SQL> @drop
Table dropped.
drop table foo
*
ERROR at line 1:
ORA-00942: table or view does not exist
/
terutama diperlukan untuk menjalankan pernyataan yang telah disematkan ;
seperti CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
pernyataan dan untuk BEGIN...END
blok.