可以用如下語(yǔ)句查看用戶自定義的資源,如函數(shù)、存儲(chǔ)過程:

為環(huán)江等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及環(huán)江網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、環(huán)江網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
SELECT?*?FROM??USER_PROCEDURES;
查到概況后根據(jù)對(duì)象名字可以查看其源碼:
SELECT?*?FROM?USER_SOURCE?WHERE?NAME?=?'COMPUTERFEE';
查找位置的函數(shù)為instr函數(shù)。下標(biāo)以1開始,如果不存在則返回0。
舉例如下:
1、創(chuàng)建測(cè)試表,
create table test_instr(str varchar2(20));
2、插入測(cè)試數(shù)據(jù)
insert into test_instr values ('abc');
insert into test_instr values ('cdaf');
insert into test_instr values ('bbed');
3、查詢表的記錄,select t.*, rowid from test_instr t;
4、編寫sql,查找字母'a'在表中各記錄的位置;
select t.*, instr(str,'a') location from test_instr t,可以發(fā)現(xiàn),最后一條記錄,不存在該字符的話,則返回0。
Oracle查詢用戶表空間:select * from user_all_tables
Oracle查詢所有函數(shù)和儲(chǔ)存過程:select * from user_source
Oracle查詢所有用戶:select * from all_users.select * from dba_users
Oracle查看當(dāng)前用戶連接:select * from v$Session
Oracle查看當(dāng)前用戶權(quán)限:select * from session_privs
表空間含義:
表空間是數(shù)據(jù)庫(kù)的邏輯劃分,一個(gè)表空間只能屬于一個(gè)數(shù)據(jù)庫(kù)。所有的數(shù)據(jù)庫(kù)對(duì)象都存放在指定的表空間中。但主要存放的是表, 所以稱作表空間。
Oracle數(shù)據(jù)庫(kù)中至少存在一個(gè)表空間,即SYSTEM的表空間。
注意 )Oracle中的字符串是嚴(yán)格區(qū)分大小寫的 日期和字符只能在單引號(hào)中出現(xiàn)
)把列與列 列與字符連接在一起用 || 符號(hào)
)列的別名 緊跟列名 也可以在列名和別名之間加入關(guān)鍵字 AS 以便在別名中包含空格或特殊的字符并區(qū)分大小寫 使用雙引號(hào)
例子
SELECT??? last_name? ||? is a ? ||? job_id?? AS? Employee Details
FROM??? employees
where??? first_name? like? %s_ ;
通用函數(shù)
空值是無(wú)效的 未指定的 未知的或不可預(yù)知的值 空值不是空格或者 包含空值的數(shù)學(xué)表達(dá)式的值都為空值
這些函數(shù)適用于任何數(shù)據(jù)類型 同時(shí)也適用于空值
NVL (expr expr )
NVL (expr expr expr )
NULLIF (expr expr )
COALESCE (expr expr exprn)
( )NVL (expr expr ) expr 為NULL 返回expr 不為NULL 返回expr 注意兩者的類型要一致
( )NVL (expr expr expr ) expr 不為NULL 返回expr 為NULL 返回expr expr 和expr 類型不同的話 expr 會(huì)轉(zhuǎn)換為expr 的類型
( )NULLIF (expr expr ) 相等返回NULL 不等返回expr
( )COALESCE(expr expr exprn) 列表中第一個(gè)非空的表達(dá)式是函數(shù)的返回值 如果所有的表達(dá)式都是空值 最終將返回一個(gè)空值
條件表達(dá)式在SQL語(yǔ)句中使用IF THEN ELSE 邏輯 可以使用兩種方法:–CASE表達(dá)式??? CASE? expr? WHEN? parison_expr ? THEN? return_expr ??????????????????? [WHEN? parison_expr ? THEN? return_expr ???????????????????? WHEN? parison_exprn? THEN? return_exprn???????????????????? ELSE? else_expr]??? END
–DECODE函數(shù)??? DECODE ( col | expression ? search ? result ??????????????? [ search result ]??????????????? [ default] )
分組函數(shù)
分組函數(shù)作用于一組數(shù)據(jù) 并對(duì)一組數(shù)據(jù)返回一個(gè)值
組函數(shù)語(yǔ)法
SELECT [column ] group_function(column)
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
注意 在SELECT列表中所有未包含在組函數(shù)中的列都應(yīng)該包含在GROUP BY子句中
(所用包含于SELECT列表中 而未包含于組函數(shù)中的列都必須包含于GROUPBY子句中)
但包含在GROUP BY 子句中的列不必包含在SELECT列表中
且可以在在GROUP BY子句中包含多個(gè)列
不能在WHERE子句中使用組函數(shù) 但可以在HAVING子句中使用組函數(shù)
使用HAVING過濾分組
行已經(jīng)被分組
使用了組函數(shù)
滿足HAVING子句中條件的分組將被顯示
SELECT column group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
子查詢
語(yǔ)法
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
注意 子查詢(內(nèi)查詢) 在主查詢之前一次執(zhí)行完成
子查詢的結(jié)果被主查詢使用(外查詢)
子查詢要包含在括號(hào)內(nèi)
將子查詢放在比較條件的右側(cè)
除非進(jìn)行Top N 分析 否則不要在子查詢中使用ORDER BY子句
單行操作符對(duì)應(yīng)單行子查詢 多行操作符對(duì)應(yīng)多行子查詢
單行操作符operator ??????????????????????????????????????????????????? 多行操作符operator
=??? 等于??????????????????????????????????????????????????????????????????????????? IN???? 等于列表中的任何一個(gè)
大于??????????????????????????????????????????????????????????????????????????? ANY? 和子查詢返回的任意一個(gè)值比較
=? 大于等于??????????????????????????????????????????????????????????????????? ALL?? 和子查詢返回的所有值比較
小于??????????????????????????????????????????????????????????????????????????? EXISTS? 功能等價(jià)于IN
=? 小于等于
不等于
DECODE和CASE SELECT中除GROUP BY 子句以外的所有子句中 都可以使用單行子查詢
在子查詢中使用HAVING子句
SELECT select_list
FROM table
[GROUP BY group_by_expression]
[HAVING group_condition] expr operator
(SELECT select_list
FROM table);
在FROM子句中使用子查詢 例子
SELECT a last_name a salary a department_id b salavg
FROM employees a (SELECT department_id AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a department_id = b department_id
AND?? a salary b salavg;
有兩個(gè)簡(jiǎn)單例子 以說(shuō)明 exists 和 in 的效率問題
) select * from T where exists(select from T where T a=T a) ;
T 數(shù)據(jù)量小而T 數(shù)據(jù)量非常大時(shí) T T 時(shí) ) 的查詢效率高
) select * from T where T a in (select T a from T ) ;
T 數(shù)據(jù)量非常大而T 數(shù)據(jù)量小時(shí) T T 時(shí) ) 的查詢效率高
exists 用法
請(qǐng)注意 )句中的有顏色字體的部分 理解其含義
其中 select from T where T a=T a 相當(dāng)于一個(gè)關(guān)聯(lián)表查詢 相當(dāng)于
select from T T ???? where T a=T a
但是 如果你當(dāng)當(dāng)執(zhí)行 ) 句括號(hào)里的語(yǔ)句 是會(huì)報(bào)語(yǔ)法錯(cuò)誤的 這也是使用exists需要注意的地方
exists(xxx) 就表示括號(hào)里的語(yǔ)句能不能查出記錄 它要查的記錄是否存在
因此 select 這里的 其實(shí)是無(wú)關(guān)緊要的 換成 * 也沒問題 它只在乎括號(hào)里的數(shù)據(jù)能不能查找出來(lái) 是否存在這樣的記錄 如果存在 這 ) 句的where 條件成立
in 的用法
繼續(xù)引用上面的例子
) select * from T where T a in (select T a from T )
這里的 in 后面括號(hào)里的語(yǔ)句搜索出來(lái)的字段的內(nèi)容一定要相對(duì)應(yīng) 一般來(lái)說(shuō) T 和T 這兩個(gè)表的a字段表達(dá)的意義應(yīng)該是一樣的 否則這樣查沒什么意義
打個(gè)比方 T T 表都有一個(gè)字段 表示工單號(hào) 但是T 表示工單號(hào)的字段名叫 ticketid T 則為 id 但是其表達(dá)的意義是一樣的 而且數(shù)據(jù)格式也是一樣的 這時(shí) 用 )的寫法就可以這樣
select * from T where T ticketid in (select T id from T )
EXISTS操作符
EXISTS 操作符檢查在子查詢中是否存在滿足條件的行
如果在子查詢中存在滿足條件的行
– 不在子查詢中繼續(xù)查找
– 條件返回TRUE
如果在子查詢中不存在滿足條件的行
– 條件返回FALSE
– 繼續(xù)在子查詢中查找
相關(guān)子查詢
相關(guān)子查詢按照一行接一行的順序執(zhí)行 主查詢的每一行都執(zhí)行一次子查詢 子查詢使用了主查詢中的列
SELECT? column column
FROM? table outer
WHERE columnk operator (SELECT? colum colum
FROM? table
WHERE expr= outer expr);
相關(guān)更新
使用相關(guān)子查詢依據(jù)一個(gè)表中的數(shù)據(jù)更新另一個(gè)表的數(shù)據(jù)
UPDATE? table alias
SET? column = (SELECT? expression
FROM? table ? alias
WHERE? lumn = lumn);
相關(guān)刪除
使用相關(guān)子查詢依據(jù)一個(gè)表中的數(shù)據(jù)刪除另一個(gè)表的數(shù)據(jù)
DELETE FROM? table alias
WHERE? column operator (SELECT? expression
FROM? table alias
WHERE lumn = lumn);
WITH子句
使用WITH子句 可以避免在SELECT語(yǔ)句中重復(fù)書寫相同的語(yǔ)句塊
WITH子句將該子句中的語(yǔ)句塊執(zhí)行一次 并存儲(chǔ)到用戶的臨時(shí)表空間中
使用WITH子句可以提高查詢效率
我們可以使用WITH? Clause來(lái)定義一個(gè)query?? block 然后在SELECT?? statement的其它地方使用這個(gè)query?? block 如果在一個(gè)很復(fù)雜的 Query 里 我們必須重復(fù)地使用某個(gè) subquery 那么使用WITH?? Clause可以降低Query的復(fù)雜度以及提高 performance 因?yàn)閃ITH?? Clause 所讀出的資料會(huì)暫存在User的temporary?? tablespace中
WITH子句應(yīng)用舉例
WITH
dept_costs AS (SELECT? d department_name SUM(e salary) AS dept_total
FROM? employees e departments d
WHERE? e department_id = d department_id
GROUP BY? d department_name)
avg_cost? AS (SELECT? SUM(dept_total)/COUNT(*) AS dept_avg
FROM? dept_costs)
SELECT? *
FROM? dept_costs
WHERE? dept_total (SELECT? dept_avg
FROM? avg_cost)
ORDER BY? department_name;
GROUP BY 擴(kuò)展
帶有ROLLUP和CUBE操作的GROUP BY子句
使用帶有ROLLUP和CUBE操作的GROUP BY子句產(chǎn)生多種分組結(jié)果
ROLLUP產(chǎn)生n + 種分組結(jié)果 其是對(duì)GROUP BY子句的擴(kuò)展
CUBE產(chǎn)生 的n次方種分組結(jié)果 其是對(duì)GROUP BY子句的擴(kuò)展
注 其中的n指的是group_by_expression的數(shù)目
ROLLUP操作符 ROLLUP產(chǎn)生n + 種分組結(jié)果 順序是從右向左
SELECT? [column ] group_function(column)
FROM? table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
CUBE操作符 CUBE會(huì)產(chǎn)生類似于笛卡爾集的分組結(jié)果
SELECT? [column ] group_function(column)
FROM? table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
GROUPING函數(shù) 能夠?qū)崿F(xiàn)更加直觀的分組結(jié)果顯示提示
SELECT? [column ] group_function(column) [GROUPING(group_by_expression)]
FROM? table
[WHERE condition]
[GROUP BY? [ROLLUP] [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
GROUPING函數(shù)可以和CUBE或ROLLUP結(jié)合使用
使用GROUPING函數(shù) 可以找到哪些列在該行中參加了分組
使用GROUPING函數(shù) 可以區(qū)分空值產(chǎn)生的原因
GROUPING函數(shù)返回 或
GROUPING SETS
GROUPING SETS是對(duì)GROUP BY子句的進(jìn)一步擴(kuò)充
使用GROUPING SETS可以實(shí)現(xiàn)在同一個(gè)查詢中定義多個(gè)分組集
Oracle 對(duì)GROUPING SETS子句指定的分組集進(jìn)行分組后用UNION ALL操作將各分組結(jié)果結(jié)合起來(lái)
Grouping set 的優(yōu)點(diǎn)
– 只進(jìn)行一次分組即可
– 不必書寫復(fù)雜的UNION語(yǔ)句
– GROUPING SETS中包含的分組項(xiàng)越多性能越好
以下例子實(shí)現(xiàn)了對(duì)department_id job_id分組 對(duì)job_id manager_id分組 最終形成兩個(gè)分組
SELECT? department_id job_id manager_id avg(salary)
FROM? employees
GROUP BY GROUPING SETS ((department_id job_id) (job_id manager_id));
復(fù)合列
復(fù)合列是被作為整體處理的一組列的集合
使用括號(hào)將若干列組成復(fù)合列在ROLLUP或CUBE中作為整體進(jìn)行操作
在ROLLUP或CUBE中 復(fù)合列可以避免產(chǎn)生不必要的分組結(jié)果
例如 GROUP BY ROLLUP( department_id (job_id manager_id)); //小括號(hào)實(shí)現(xiàn)復(fù)合列
連接分組集
連接分組集可以產(chǎn)生有用的對(duì)分組項(xiàng)的結(jié)合
將各分組集 ROLLUP 和CUBE用逗號(hào)連接 Oracle自動(dòng)在GROUP BY子句中將各分組集進(jìn)行連接
連接的結(jié)果是對(duì)各分組生成笛卡爾集
例如 GROUP BY GROUPING SETS(a b) GROUPING SETS(c d);
lishixinzhi/Article/program/Oracle/201311/18505
工具sqlplus或者plsqldeveloper
方法一:sqlplus
①登錄用戶后,執(zhí)行下面語(yǔ)句查看當(dāng)前用戶有哪些存儲(chǔ)過程:
select ?name from user_source where ?type='PROCEDURE';
或者:
select object_name from user_procedures;
或者:
select object_name from user_objects where object_type='PROCEDURE' ;
②找到你所要查詢的存儲(chǔ)過程名字后,執(zhí)行下面操作,可以看到存錯(cuò)過程內(nèi)容:
select ?text from user_source where name ='xxxx';--(xxxx代表所要查詢的存儲(chǔ)過程名字)
------------------------------------------------
如果是函數(shù),類似的方法,只需要把PROCEDURE,換成FUNCTION即可
-----------------------------------------------
方法二:pl/sql developer
打開該工具后,在最左側(cè)可以看到如下截圖,選擇 My objects
然后選擇functions或者Procedures,找到想要查看的對(duì)象后,選中,鼠標(biāo)右鍵,彈出一個(gè)選項(xiàng)頁(yè),這里主要的幾個(gè)做一下介紹:
view:查看,不能編輯
edit:可以編輯
drop:刪除該存儲(chǔ)過程
test:執(zhí)行該存儲(chǔ)過程
名稱欄目:oracle怎么查詢函數(shù) oracle查詢函數(shù)表
文章起源:http://chinadenli.net/article32/hghdsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、搜索引擎優(yōu)化、外貿(mào)建站、、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)