When do I need to use a semicolon vs a slash in Oracle SQL?

前端 未结 6 795
刺人心
刺人心 2020-11-21 22:58

We have been having some debate this week at my company as to how we should write our SQL scripts.

Background: Our database is Oracle 10g (upgrading to 11 soon).

6条回答
  •  时光说笑
    2020-11-21 23:46

    I know this is an old thread, but I just stumbled upon it and I feel this has not been explained completely.

    There is a huge difference in SQL*Plus between the meaning of a / and a ; because they work differently.

    The ; ends a SQL statement, whereas the / executes whatever is in the current "buffer". So when you use a ; and a / the statement is actually executed twice.

    You can easily see that using a / after running a statement:

    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
    

    In this case one actually notices the error.


    But assuming there is a SQL script like this:

    drop table foo;
    /
    

    And this is run from within SQL*Plus then this will be very confusing:

    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
    

    The / is mainly required in order to run statements that have embedded ; like a CREATE PROCEDURE statement.

提交回复
热议问题