標籤:
這篇是7788湊的:
":="是指派陳述式 如: l_name :=‘sky‘;...
"=" 是判斷是否相等. 如: if 1=1 then...
":" 是變數綁定 如: if :P_NAME =‘sky‘ then...
變數綁定 是指在sql語句的條件中使用變數而不是常量。比如shared pool裡有兩條sql語句,
select * from tab1 where col1=1;
select * from tab1 where col1=2;
對oracle資料庫來說,這是兩條完全不同的SQL,對這兩條語句都需要進行hard parse。因為oracle會根據sql語句的文本去計算每個字元在記憶體裡的hash值,因此雖然上述兩條SQL只有一個字元不一樣,oracle根據hash演算法在記憶體中得到的hash地址就不一樣,所以oracle就會認為這是兩條完全不同的語句。而如果將上述SQL改寫成select * from tab1 where col1=:var1;,然後通過對變數var1的賦值去查詢,那麼oracle對這條語句第一次會進行hard parse,以後就只進行soft parse。假設某條語句被重複執行了幾十萬次,那麼使用bind var帶來的好處是巨大的。一個應用程式如果bind var使用不充分,那麼幾乎一定會伴隨著嚴重的效能問題。
綁定變數是相對文本變數來講的,所謂文本變數是指在SQL直接書寫查詢條件,這樣的SQL在不同條件下需要反覆解析,綁定變數是指使用變數來代替直接書寫條件,查詢bind value在運行時傳遞,然後綁定執行。優點是減少硬解析,降低CPU的爭用,節省shared_pool ;缺點是不能使用histogram,sql最佳化比較困難
oracle萬用字元和運算子
用於where比較條件的有: 等於:=、<、<=、>、>=、<> 包含:in、not in exists、not exists 範圍:between...and、not between....and 匹配測試:like、not like Null測試:is null、is not null 布爾連結:and、or、not www.2cto.com 萬用字元: 在where子句中,萬用字元可與like條件一起使用。在Oracle中: %(百分比符號): 用來表示任意數量的字元,或者可能根本沒有字元。 _(底線): 表示確切的未知字元。 ?(問號): 用來表示確切的未知字元。 #(井號): 用來表示確切的阿拉伯數字,0到9。 [a-d](方括弧):用來表示字元範圍,在這裡是從a到d。 單引號(‘):在Oracle中,應該只使用單引號將文本和字元和日期括起來,不能使用引號 (包括單雙引號)將數字括起來。 雙引號("):在Oracle中,單雙引號含義不同。雙引號被用來將包含特定字元或者空格的列別名括起來。雙引號還被用來將文本放入日期格式。 撇號(‘):在Oracle中,撇號也可以寫成彼此相鄰的兩個單引號。為了在供應商名字中間尋找所有帶撇號的供應商名字,可以這樣編寫代碼: select * from l_suppliers where supplier_name like ‘%‘‘%‘ &符號:在Oracle中,&符號常用來指出一個變數。例如,&fox是一個變數,稍微有點不同的一種&& fox。每當&fox出現在Oracle指令碼中時,都會要求您為它提供一個值。而使用&&fox,您只需要在& &fox第一次出現時為它提供變數值。如果想將&符號作為普通的符號使用,則應該關閉這個特性。要想關閉這個特性,可以運行以下的命令: set define off ,這是一個SQLplus命令,不是一個SQL命令。SQLplus設定了SQL在Oracle中啟動並執行環境。 雙豎線(||):Oracle使用雙豎線表示字串串連函數。 星號(*):select *意味著選擇所有的列,count(*)意味著計算所有的行,表示萬用字元時,表示0個或任意多個字元。 正斜杠(/):在Oracle中,用來終止SQL語句。更準確的說,是表示了“運行現在位於緩衝區的SQL代碼”。正斜杠也用作分隔項。 不等於:有多種表達方式:!=、^=、<>、not xxx=yyy、not(xxx=yyy)
oracle = : := 和變數綁定 oracle萬用字元和運算子