मुझे पता है कि यह एक पुराना धागा है, लेकिन मैं बस इस पर ठोकर खाई और मुझे लगता है कि इसे पूरी तरह से समझाया नहीं गया है।
SQL*Plus में /
. के अर्थ के बीच बहुत बड़ा अंतर है और एक ;
क्योंकि वे अलग तरह से काम करते हैं।
;
एक SQL कथन समाप्त होता है, जबकि /
वर्तमान "बफर" में जो कुछ भी है उसे निष्पादित करता है। इसलिए जब आप ;
. का उपयोग करते हैं और एक /
कथन वास्तव में दो बार निष्पादित होता है।
आप आसानी से देख सकते हैं कि /
. का उपयोग करके स्टेटमेंट चलाने के बाद:
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
इस मामले में कोई वास्तव में त्रुटि को नोटिस करता है।
लेकिन मान लें कि इस तरह की एक SQL स्क्रिप्ट है:
drop table foo;
/
और यह SQL*Plus के भीतर से चलाया जाता है तो यह बहुत भ्रमित करने वाला होगा:
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
/
मुख्य रूप से उन बयानों को चलाने के लिए आवश्यक है जो एम्बेडेड हैं ;
जैसे CREATE PROCEDURE
,CREATE FUNCTION
,CREATE PACKAGE
कथन और किसी भी BEGIN...END
. के लिए ब्लॉक।