亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Oracle SQL中,何時需要使用分號和斜杠?

在Oracle SQL中,何時需要使用分號和斜杠?

茅侃侃 2019-06-12 16:29:23
在Oracle SQL中,何時需要使用分號和斜杠?本周,我們在我的公司就如何編寫SQL腳本進行了一些討論。背景:我們的數據庫是Oracle 10g(升級到11很快)。我們的DBA團隊使用SQLPlus來將腳本部署到生產中?,F在,我們最近的部署失敗了,因為它同時使用了分號和正斜杠(/)。分號在每個語句的末尾,斜杠在語句之間。alter table foo.bar drop constraint bar1;/alter table foo.can drop constraint can1;/后面在腳本中添加了一些觸發器,創建了一些視圖以及一些存儲過程。同時擁有;而/導致每個語句運行兩次,導致錯誤(特別是在需要唯一的插入上)。在SQLDeveloper中,這種情況不會發生,在TOAD中則不會發生。如果運行某些命令,則沒有/在他們身上。在PL/SQL中,如果您有一個子程序(聲明、開始、結束),所使用的分號將被視為子程序的一部分,因此必須使用斜杠。所以我的問題是:如果您的數據庫是Oracle,那么編寫SQL腳本的正確方法是什么?因為您知道您的DB是Oracle,所以應該始終使用/?
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

這是一個優先考慮的問題,但我更愿意看到持續使用斜杠的腳本-這樣,所有的“工作單元”(創建PL/SQL對象、運行PL/SQL匿名塊和執行DML語句)都可以通過眼睛更容易地識別出來。

另外,如果您最終轉向類似Ant的部署,那么它將簡化目標的定義,使其具有一致的語句分隔符。


查看完整回答
反對 回復 2019-06-12
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

我知道這是一個老生常談,但我只是偶然發現,我覺得這一點還沒有得到完全解釋。

在SQL*Plus中,/和一個;因為他們的工作方式不同。

這個;結束SQL語句,而/執行當前“緩沖區”中的任何內容。所以當你使用;  a /該語句實際上執行了兩次。

您可以很容易地看到,使用/運行語句之后:

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012Copyright (c) 1982, 2010, Oracle.  
All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith 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 2012Copyright (c) 1982, 2010, Oracle.  
All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning and OLAP options

SQL> @dropTable dropped.drop table foo           *ERROR at line 1:ORA-00942: table or view does not exist

這個/主要是為了運行嵌入了;就像CREATE PROCEDURE聲明。


查看完整回答
反對 回復 2019-06-12
  • 3 回答
  • 0 關注
  • 2180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號