oracle知识汇总
oracle實(shí)現(xiàn)導(dǎo)出命令
?
exp 用戶(hù)名/密碼@數(shù)據(jù)庫(kù)實(shí)例 file=/usr/oracle/orcl20140107.dmp owner=表空間?
oracle數(shù)據(jù)類(lèi)型
?
LONG: 可變長(zhǎng)的字符串?dāng)?shù)據(jù),最長(zhǎng)2G,LONG具有VARCHAR2列的特性,可以存儲(chǔ)長(zhǎng)文本一個(gè)表中最多一個(gè)LONG列
LONG RAW: 可變長(zhǎng)二進(jìn)制數(shù)據(jù),最長(zhǎng)2G
CLOB:? 字符大對(duì)象Clob 用來(lái)存儲(chǔ)單字節(jié)的字符數(shù)據(jù)
NCLOB: 用來(lái)存儲(chǔ)多字節(jié)的字符數(shù)據(jù)
BLOB: 用于存儲(chǔ)二進(jìn)制數(shù)據(jù)
BFILE: 存儲(chǔ)在文件中的二進(jìn)制數(shù)據(jù),這個(gè)文件中的數(shù)據(jù)只能被只讀訪(fǎng)。但該文件不包含在數(shù)據(jù)庫(kù)內(nèi)。
bfile字段實(shí)際的文件存儲(chǔ)在文件系統(tǒng)中,字段中存儲(chǔ)的是文件定位指針.bfile對(duì)oracle來(lái)說(shuō)是只讀的,也不參與事務(wù)性控制和數(shù)據(jù)恢復(fù).
CLOB,NCLOB,BLOB都是內(nèi)部的LOB(Large Object)類(lèi)型,最長(zhǎng)4G,沒(méi)有LONG只能有一列的限制
要保存圖片、文本文件、Word文件各自最好用哪種數(shù)據(jù)類(lèi)型?BLOB最好,LONG RAW也不錯(cuò),但Long是oracle將要廢棄的類(lèi)型,因此建議用BLOB。
oracle設(shè)計(jì)規(guī)范
oracle從表名稱(chēng) = 主表+下劃杠 + 從表表名稱(chēng)
oracle不要在存儲(chǔ)過(guò)程、自定義函數(shù)、程序包中使用ddl語(yǔ)言
oracle表主鍵都是key命名而不是以ID命名
oracle主鍵字段會(huì)自增長(zhǎng)
oracle 數(shù)組類(lèi)型 is Table of
oracle申明變量不需要定義字段類(lèi)型方式
?
declare??????v_startDate?bsc_schyear_term?.startdate%type;?
????v_endDate??bsc_schyear_term.endDate%type;?
begin??
這種情況下定義變量,也不要自己定義類(lèi)型了
直接用表返回對(duì)應(yīng)字段類(lèi)型
在oracle中
select field1, field2 into args1, args2 from tableName 以上查詢(xún)沒(méi)有值時(shí)會(huì)報(bào)錯(cuò),因此需要加上exception 方式避免出錯(cuò)
SELECT STARTDATE, ENDDATE INTO v_termStartDate, v_termEndDate FROM TableTerm WHERE schoolKey= v_schoolKey AND termKey= v_termKey; EXCEPTION WHEN NO_DATA_FOUND THEN v_termStartDate := Pkg_Stm_Date.Fn_GetCurrentDate(); v_termEndDate := Pkg_Stm_Date.Fn_GetCurrentDate();
?
oracle打印字句
?
dbms_output.put_line(v_num);?
oracle 變量賦值
?
SELECT STARTDATE, ENDDATE INTO v_termStartDate, v_termEndDate FROM TableTermList WHERE DATAAREAID = v_schoolKey AND TERMTYPEKEY = v_termKey;?
oracle調(diào)用程序包中的存儲(chǔ)過(guò)程方法
1、call 程序包.存儲(chǔ)過(guò)程名稱(chēng)(:args1,:arg2);
2、execute 程序包.存儲(chǔ)過(guò)程(:args1,args2);
oracle生成連續(xù)日期的數(shù)據(jù)集
?
SELECT TO_CHAR(CurrDate, 'YYYYMMDD') AS Date_WID,TO_CHAR(CurrDate, 'YYYY') AS Year,TO_CHAR(CurrDate, 'YYYY')||'-Q'||TO_CHAR(CurrDate, 'Q') AS Quarter,TO_CHAR(CurrDate, 'YYYY-MM') AS Month,TO_CHAR(CurrDate, 'MM') AS Month_Num,TO_CHAR(CurrDate, 'Mon','NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''') AS Month_Short,TO_CHAR(CurrDate, 'WW') AS Week,TO_CHAR(CurrDate, 'Day') as Week_Day,TO_CHAR(CurrDate, 'YYYY-MM-DD') AS Full_DateFROM (select level n,TO_DATE('2010-12-31', 'YYYY-MM-DD') + NUMTODSINTERVAL(level, 'day') CurrDatefrom dualconnect by level <= 5000 );?
oracle常用工具
獲取表:
?
select table_name from user_tables; //當(dāng)前用戶(hù)的表 select table_name from all_tables; //所有用戶(hù)的表 select table_name from dba_tables; //包括系統(tǒng)表select table_name from dba_tables where owner='用戶(hù)名'
user_tables:
table_name,tablespace_name,last_analyzed等
dba_tables:
ower,table_name,tablespace_name,last_analyzed等
all_tables:
ower,table_name,tablespace_name,last_analyzed等
all_objects:
ower,object_name,subobject_name,object_id,created,last_ddl_time,timestamp,status等
獲取表字段:
user_tab_columns:
table_name,column_name,data_type,data_length,data_precision,data_scale,nullable,column_id等
all_tab_columns :
ower,table_name,column_name,data_type,data_length,data_precision,data_scale,nullable,column_id等
dba_tab_columns:
ower,table_name,column_name,data_type,data_length,data_precision,data_scale,nullable,column_id等
獲取表注釋:
select * from user_tab_comments
user_tab_comments:table_name,table_type,comments
--相應(yīng)的還有dba_tab_comments,all_tab_comments,這兩個(gè)比user_tab_comments多了ower列。
獲取字段注釋:
select * from user_col_comments
user_col_comments:table_name,column_name,comments
oracle中調(diào)用不帶輸出參數(shù)的存儲(chǔ)過(guò)程方法
?
begincall/execute 程序包名.存儲(chǔ)過(guò)程名稱(chēng)(輸入?yún)?shù)列表); end;?
oracle中調(diào)用帶輸出參數(shù)的存儲(chǔ)過(guò)程方法
?
/* v_out_a 和 v_out_b均為輸出參數(shù) */ declare v_out_a pls_integral;v_out_b varchar2; begin程序包名.存儲(chǔ)過(guò)程名稱(chēng)(v_out_a,v_out_b varchar2) end;?
oracle中日期轉(zhuǎn)換為中文星期
?
select to_char(sysdate,'day','nls_date_language=''simplified chinese''') from dual;oracle打印
?
dbms_output.put_line(sysdate);
oracle中中文作為列名稱(chēng)必須加上雙引號(hào)
oracle動(dòng)態(tài)sql的使用方法
?
Excute immediate 動(dòng)態(tài)SQL語(yǔ)句 using 綁定參數(shù)列表 returning into 輸出參數(shù)列表;?
?
Declare l_sql??????? Varchar2(500);l_PrimaryKey Pls_Integer := 1; Begin--動(dòng)態(tài)sql中使用占位符l_sql := 'select * from tableName where primaryKey := 1';--使用using綁定參數(shù)Execute Immediate l_sql Using l_PrimaryKey; End ;?
oracle 返回游標(biāo)方式
?
Procedure SP_TCH_Procedure(P_SchoolKey In Varchar2 Default '',P_TermKey In Varchar2 Default '0',P_GradeKey In Varchar2 Default '0',cursorResult Out Sys_refcursor)?
執(zhí)行動(dòng)態(tài)sql
?
If Length(v_sql) > 0 Then Open cursorResult For v_sql using P_SchoolKey, P_TermKey, P_Gradekey; End If;?
執(zhí)行動(dòng)態(tài)sql有以下方式
動(dòng)態(tài)SQL的實(shí)現(xiàn)可以用:dbms_sql、execute immediate、open...for...(用于游標(biāo))
--動(dòng)態(tài)sql讀取字段值
execute immediate 'select name,salary from emp where id=:1 ' using p_id returning into v_name,v_salary;
oracle中type定義與使用方法
1、使用create進(jìn)行創(chuàng)建
?
CREATE OR REPLACE TYPE Tbl_StrSplit IS TABLE OF VARCHAR2 (32767);使用該種方法創(chuàng)建類(lèi)型后,在程序包、函數(shù)、存儲(chǔ)過(guò)程中無(wú)需進(jìn)行定義可以直接使用
?
2、在程序包中定義
?
TYPE Rec_Date?????? Is Table Of Varchar2(20);?
使用該種方法若需要返回?cái)?shù)據(jù)集,則只能使用管道方式調(diào)用
?
?
--返回日期列表,以表數(shù)據(jù)方式顯示可以進(jìn)行表關(guān)聯(lián)Function Fn_GetDateTable(P_StartDate Varchar2, P_EndDate Varchar2) Return Rec_Date PipelinedIsBeginFor dateRow In (Select TO_DATE(P_StartDate, 'yyyy-mm-dd') + NUMTODSINTERVAL(Level, 'day') thisDateFrom dualConnect By Level <= To_Date(P_EndDate,'yyyy-mm-dd') - To_Date(P_StartDate, 'yyyy-mm-dd')) loopPipe Row(to_char(dateRow.thisDate,'yyyy-mm-dd'));End Loop;Return; End Fn_GetDateTable;?????? Pls_Integer 與number兩個(gè)數(shù)據(jù)類(lèi)型的區(qū)別
oracle隱式cursor,會(huì)自動(dòng)打開(kāi)關(guān)閉。
?
open storage_cur for select * from t_storage t where t.user_id = userid;Oracle代碼加密工具
ORACLE 提供了一個(gè)實(shí)用工具來(lái)加密或者包裝用戶(hù)的PL/SQL,它會(huì)將用戶(hù)的PL/SQL改變?yōu)橹挥蠴RACLE能夠解釋的代碼版本.
WRAP 實(shí)用工具位于$ORACLE_HOME/BIN.
?格式為:
WRAP INAME=<input_file_name> [ONAME=<output_file_name>]
wrap iname=e:\sample.txt
查看程序包的代碼內(nèi)容
?
select text from user_source wherename='程序包名稱(chēng)';oracle實(shí)現(xiàn)多條記錄分區(qū)塊合并指定字段的值的實(shí)現(xiàn)命令
?
select subjTypeKey,SubjectOrder,subjectName,wm_concat(teacherName) name from VW_TCH_TEACHERSUBJECTPROPERTYgroup by subjTypeKey,SubjectOrder,subjectNameorder by SubjectOrder;?
oracle中實(shí)現(xiàn)隨機(jī)讀取方法
?
select dictkey from vw_stm_dict_subjtype_r order by dbms_random.value?
oracle中實(shí)現(xiàn)top命令方法
?
select dictkeyfrom ( select dictkey from vw_stm_dict_subjtype_r order by dbms_random.value ) where rownum <= 1?
?
轉(zhuǎn)載于:https://www.cnblogs.com/wala-wo/archive/2013/06/03/5119328.html
總結(jié)
以上是生活随笔為你收集整理的oracle知识汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何快速是DNS修改生效
- 下一篇: HTML5实践