這篇是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)