|
PL/SQL函數指令
|
說明
|
|
ABS(n)
|
絕對值
|
|
ACOS(O)
|
逆三角餘弦值
|
|
ADD_MONTHS(d,n)
|
傳回d值加n個月
|
|
ASCII(n)
|
Ascii字元傳回十進位值
|
|
ATAN(n)
|
逆三角正切值(徑,p/2 ~ -p/2)
|
|
ATAN2(m,n)
|
逆三角正切值(徑,p ~ -p)
|
|
AVG(n)
|
傳回平均值
|
|
BFILENAME(m,n)
|
傳回外部檔案值,m=目錄字串,
n=檔案字串
|
|
CEIL(n)
|
無條件進位的整數
|
|
CHARTOROWID
|
將字元型態轉為ROWID型態
|
|
CHR(n)
|
Chr十進位值,傳回ascii碼
|
|
CONCAT(m,n)
|
不論文字或數字相加,都以字串相
加方式
|
|
CONVERT(m,n,z)
|
將字串轉換另一國家字元設定值
|
|
COS(n)
|
傳回n的餘弦值
|
|
COSH(n)
|
傳回n的雙曲線餘弦值
|
|
COUNT(n)
|
傳回總筆數
|
|
DECODE
(C n,v1,r1,v2,r2d1)=v2
|
變數c字串或n數字,=v1則值=r1,則值=v2,或=dl
|
|
DUMP(m,n,n1,n2…)
|
傳回m的長度及內碼,n=進位數(預設值=10進位),n1=m的開始位置,n2=取的位無數
|
|
EMPTY_[B
C] LOB()
|
將BLOB或CLOB初始化,就是傳回BLOB或CLOB的空指標
|
|
EXP(n)
|
傳回自然對數e的n次方值
|
|
FLOOR(n)
|
無條件捨去的整數
|
|
GREATEST(m)
|
m可為數字或文字,傳回最大值
|
|
GROUPING(n)
|
傳回群集
|
|
HEXTORAW(m)
|
將十六進位轉換為原始值
|
|
INITCAP(n)
|
傳回字句一個字為大寫
|
|
INSTR(char1,
char2 [m,[n]] )
|
求char1中從m位置起char2第n次出現的位置
|
|
INSTR(m,n)
|
傳回n字串在m字串中的位置
|
|
INSTRB(m,n)
|
以byte傳回n字串在m字串中的位置
|
|
LAST_DAY(d)
|
傳回該月的最後一天的日期
|
|
LEAST(m1,m2,m3...mn)
|
m可為數字或文字,傳回最小值
|
|
LENGTH(n)
|
傳回字串的長度
|
|
LENGTHB(n)
|
以byte方式傳回字串的長度
|
|
LN(n)
|
自然對數
|
|
LOG(m ,
n)
|
m進位的n對數
|
|
LOWER
|
傳回每一字為小寫
|
|
LPAD(m ,
n , z)
|
以n減1ength(m)的z字元數填入m的左邊
|
|
LTRIM(n)
|
去除字串左邊的空格字元
|
|
MAX(n)
|
傳回最大值
|
|
MIN(n)
|
傳回最小值
|
|
MOD(m ,
n)
|
求m/n整數的餘數
|
|
MONTHS_BETWEEN(m,n)
|
傳回m - n的值,單位月(日期相減
單位為日)
|
|
NEW_TIME(m
, n , z)
|
n時區的日期、時間是m,傳回在
z時區的日期時間
|
|
NEXT_DAY(m
, n)
|
下一個星期n(1-7=sun-sat)是那一天
|
|
NLS_CHARSET_DECL_LEN(M
, N)
|
傳回所要的字體組對應當前資料庫
的字體組,m=字體數;n=字體組(如:'ZHT16BIG5')
|
|
NLS_CHARSET_ID(m)
|
傳回字體組的識別碼,m=字體組
|
|
NLS_CHARSET_NAME(n)
|
傳回字體組,n=字體組的識別碼
|
|
NLS_INITCAP(m
[,N])
|
傳回字句一個字為大寫(依照國家
語言不同)
|
|
NLS_LOWER
|
傳回每一字為小寫(依照國家語言
不同)
|
|
NLS_UPPER
|
傳回每一字為大寫(依照國家語言
不同)
|
|
NLSSORT
|
決定排列順序(依照國家語言不同)
|
|
NVL(m,n)
|
m為NULL則傳回n值,否則傳回
m值
|
|
NVL2(m , n , z)
|
|
|
POWER(m
, n)
|
傳回m的n次方
|
|
RAWTOHEX(m)
|
將原始值(例如A=65)進位轉換為
十六進位
|
|
REPLACE(m
, n [, z] )
|
M字串中去除n字串以z字串取代
|
|
ROUND(d)
|
日期四捨五入以中午為中點
|
|
ROUND(m
[, n])
|
算數m四捨五入,取到小數點第n
位[n default=0]
|
|
ROWIDTOCHAR(m)
|
將ROWID型態轉為字元型態
|
|
RPAD(m ,
n , z)
|
以n減1ength(m)的z字元數填入m的右邊
|
|
RTRIM(n)
|
去除字串右邊的空格字元
|
|
SIGN(n)
|
信號的傳回,n<0 span="">則-1,n=0則0,n>0則 10>
|
|
SIN(n)
|
傳回n的正弦值
|
|
SINH(n)
|
傳回n的雙曲線的正弦值
|
|
SOUNDEX(m)
|
傳回以字串m的聲音(可做文字發音比對)
|
|
SQRT(n)
|
傳回n開平方根的值
|
|
STDDEV(n)
|
傳回標準差
|
|
SUBSTR(m
, n , z)
|
m字串中從頭n數位開始取,取z
個字元
|
|
SUBSTRB(m
, n , z)
|
以byte方式m字串中從頭n數位開始取,取z個字元
|
|
SUM(n)
|
傳回加總
|
|
SYS_CONTEXT(m
, n)
|
傳回與某一個context名稱關聯的Package spec定義的變數的值,m=context的名稱,n=變數名稱
|
|
SYS_GUID()
|
傳回全球獨一無二的識別碼
|
|
SYSDATE
|
傳回系統日期
|
|
TAN(n)
|
傳回n的正切值
|
|
TANH
|
傳回n的雙曲線的正切值
|
|
TO_CHAR(d,t)
|
將日期格武轉換為文字格式,d=日期,t=日期型態格武
|
|
TO_CHAR(n)
|
將數字格式轉換為文字格式
|
|
TO_DATE(m , t)
|
將文字格式轉換為日期格式,m=字串,t=日期型態格式
|
|
TO_LOB(m)
|
將LONG的資料型態轉換成LOB的資料型態
|
|
TO_MULTI_BYTE(m)
|
將CHAR的資料型態轉換成多位元的字體
|
|
TO_NUMBER(m)
|
將字串轉成數字
|
|
TO_SINGLE_BYTE(m)
|
將多位元的字體轉換成CHAR的字體
|
|
TRANSLATE(m using n)
|
將Char轉咸nchar
|
|
TRANSLATE(m , n [,z])
|
以n字串尋找m字串,以z字串取代
|
|
TRIM(n)
|
去除字串左、右邊的空格字元
|
|
TRUNC(d [, n])
|
將d截斷到n[n default=NULL(日)],n='month'截斷到月
|
|
TRUNC(m [, n])
|
將m截斷到n位[n default=0],n=-1則截斷個位為0
|
|
UID(m)
|
傳回目前的使用者的唯一識別碼
|
|
UPPER(n)
|
傳回每一字為大寫
|
|
USER
|
傳回使用者名稱
|
|
USERENV(m)
|
傳回使用者環境參數的資訊
|
|
VARIANCE(n)
|
傳回變異量
|
|
VSIZE(m)
|
傳回字串的bytes數
|
2014年5月24日 星期六
PL/SQL 函數說明
pl sql 顯示游標、隱示游標 與 bulk collect 的使用說明
以下主要為說明 PL/SQL 中游標的使用以及其優缺點
在PL/SQL裡的游標可以分為顯式和隱式兩種,而隱式有分為select into隱式游標和for .. in 隱式游標兩種。所以,我們可以認為,有3種游標用法:
A. 顯式游標
B. select into隱式游標
C. for .. in 隱式游標
如何正確的選擇使用哪種游標,將對你的程式的性能,可讀性,代碼量等產生重大影響……
--By RollingPig
三種方法在使用上的優劣比較
顯式游標
|
select into隱式游標B
|
for .. in 隱式游標
| |
優點
|
|
|
|
缺點
|
麻煩,需要定義,打開,Fetch,Close一堆代碼,增加代碼複雜度,從而增加出錯的可能性
|
|
|
三種游標形式的簡單例子
A. 顯式游標
普通顯式游標,指的是通過定義獲得游標,並通過open,fetch,close的等方法來操作游標
代碼:
declare
cursor c is
select tname from tab;
l_tname varchar2(64);
begin
open c;
loop
fetch c
into l_tname;
exit when c%notfound;
dbms_output.put_line(l_tname);
end loop;
close c;
end;
Bulk Collect的 顯式游標
代碼:
Declare
cursor c is
select tname from tab;
l_tname_array dbms_sql.varchar2_table;
begin
open c;
fetch c bulk collect
into l_tname_array;
for i in 1 .. l_tname_array.count loop
dbms_output.put_line(l_tname_array(i));
end loop;
close c;
end;
Bulk Collect的 顯式游標 + limit
代碼:
Declare
cursor c is
select tname from tab;
l_tname_array dbms_sql.varchar2_table;
begin
open c;
loop
fetch c bulk collect
into l_tname_array limit 10;
exit when c%notfound;
for i in 1 .. l_tname_array.count loop
dbms_output.put_line(l_tname_array(i));
end loop;
end loop;
close c;
end;
隱式游標相對於顯式游標而言,指的是不需要事先Declare,也無須用open,fetch,close的等方法來操作,而是通過其他的方式來操作游標
B. select into隱式游標
代碼:
Declare
l_tname varchar2(100);
begin
select tname into l_tname from tab where rownum = 1;
dbms_output.put_line(l_tname);
end;
動態SQL 的 select into隱式游標
代碼:
Declare
TYPE l_tname_array IS TABLE OF VARCHAR2(100);
p_tname_array l_tname_array;
l_table_name varchar2(100);
l_sql varchar2(200);
begin
p_tname_array := l_tname_array();
p_tname_array.extend(1);
l_table_name := 'TAB';
l_sql := 'select tname from ' || l_table_name ||
' where rownum = 1 ';
execute immediate l_sql
into p_tname_array(1);
for i in 1 .. p_tname_array.count loop
dbms_output.put_line(p_tname_array(i));
end loop;
end;
動態SQL 的 select into隱式游標 + Bulk Collect
代碼:
Declare
l_tname_array dbms_sql.varchar2_table;
l_table_name varchar2(100);
l_sql varchar2(200);
begin
l_table_name := 'TAB';
l_sql := 'select tname from ' || l_table_name;
execute immediate l_sql bulk collect
into l_tname_array;
for i in 1 .. l_tname_array.count loop
dbms_output.put_line(l_tname_array(i));
end loop;
end;
C. for .. in 隱式游標
for .. in 隱式游標通過loop的開始於結束來控制cursor的Open與Close.
代碼:
Begin
for c in (select tname from tab) loop
dbms_output.put_line(c.tname);
end loop;
end;
使用時機與選擇
- 在返回資料為一行的情況下,儘量使用select into 的隱式游標返回0行或者 100, 應選用顯示游標+Bulk collect ,以獲得較高的Fetch 性能,同時不至於使用太大的PGA記憶體
- 如果使用動態SQL, 則根據select list (column list) 是否固定,如果固定,仍然可以考慮使用select into 的隱式游標+動態SQL的方式。當然,仍然需要考慮返回行數的問題。
- 如果select list (column list) 不固定,則只好使用顯式游標,或者動態語句返回行數太多,必須用limit,那麼也只好用顯式游標了。
pl sql 正則表達式
這裡在正則表達式中用到的^、$、[0-9]都被稱為元數據(metacharacter),正則表達式都是由多元表達式組成的。在這裡,^表示一個字符串的開頭,$表示一個字符換的結尾,因此^198表示以198開頭的字符串,而[0-9]$則表示以0-9的數字結尾的字符串。因此整體上’^198[0-9]$’就能匹配所有1980-1989的字符串。
正則表達式中常用到的元數據(metacharacter)如下:
1.
^ 匹配字符串的開頭位置。
2.
$ 匹配支付傳的結尾位置。
3.
* 匹配該字符前面的一個字符0次,1次或者多次出現。例如52*oracle 可以匹配
5oracle,52oracle,522oracle,5222oracle等等。
4.
+ 匹配該字符前面的一個字符1次或者多次出現。例如52+oracle 可以匹配
52oracle,522oracle,5222oracle等等
5.
? 匹配該字符前面的一個字符0次或1次或者多次出現。例如52?oracle 只能匹配5oracle,52oracle等等
6. {n} 匹配一個字符串n次,n為正整數。例如:hel{2}o 所匹配的是hello
7.
{n,m} 匹配一個字符串至少n次,至多m次。其中n和m都是整數。
匹配除了null之外的任何單個字符串
8.
(pattern) 這個是用來匹配指定模式的一個子表達式
9.
x|y 匹配x或者y,其中x和y是一個或者多個字符
10. [abc] 匹配括號中的任意一個字符。例如:[ab]bc可以匹配abc和bbc
11. [a-z] 匹配指定範圍內的任意字符串。例如[A-G]hi可以匹配Ahi至Ghi
12.
[::]指定一個字符類,可以匹配該類中的任意字符 這裡的字符類包括:
• [:alphanum:] 可以匹配字符0-9、A-Z、a-z
• [:alpha:]可以匹配字符A-Z、a-z
•
[:blank:]可以匹配空格或者tab鍵
• [:digit:]可以匹配數字 0-9
•
[:gragh:]可以匹配非空字符
•
[:punct:]可以匹配. , ” ‘等標點符號。
• [:upper:]可以匹配字符A-Z
•
[:lower:]可以匹配字符a-z
2013年7月30日 星期二
Mac的print screen
相信很多剛轉入mac的人都有windows上的print screen如何用的問題
其實是有快速鍵的喔
方法一:自動capture整個畫面並且自動存檔
使用方法 " 按⌘ + Shift + 3"
方法二:以滑鼠框出範圍,並且自動存檔
使用方法 " 按⌘ + Shift + 4"
方法三:以滑鼠選取特定視窗,將視窗的內容變成圖檔
其實是有快速鍵的喔
方法一:自動capture整個畫面並且自動存檔
使用方法 " 按⌘ + Shift + 3"
方法二:以滑鼠框出範圍,並且自動存檔
使用方法 " 按⌘ + Shift + 4"
方法三:以滑鼠選取特定視窗,將視窗的內容變成圖檔
使用方法 " 按⌘ + Shift + 4" + 空白鍵 (游標會變成相機的圖案)
訂閱:
文章 (Atom)