PL/SQL是 非標(biāo)準(zhǔn)的SQL語句
成都網(wǎng)站制作、成都做網(wǎng)站介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
Oracle同樣也支持標(biāo)準(zhǔn)的SQL語句寫法,
寫SQL的時(shí)候,注意盡量不要 使用Oracle特有的 函數(shù),關(guān)鍵字 如:start with ,connect by,|| ,(+)等
以前做過,用專業(yè)的話叫做數(shù)據(jù)清洗。這樣的數(shù)據(jù)往往是不同人員/在不同時(shí)間錄入的。
我的思路是這樣:
第一步、去掉非關(guān)鍵字,保留關(guān)鍵字。
拿“中國工商銀行xxx支行”來說錄入的名稱可能存在很多情況比如“工商銀行xxx支行”/“工行xxx支行”等,
針對(duì)這些情況我們要排除非關(guān)鍵字對(duì)數(shù)據(jù)的干擾,以”中國“開始的去掉”中國“二字,以”支行“結(jié)尾的去掉”支行“二字。
第二步、同義詞轉(zhuǎn)換。比如”工商銀行“=”工行“,”農(nóng)業(yè)銀行“=”農(nóng)行“等。
第三步、數(shù)據(jù)標(biāo)準(zhǔn)化。將不標(biāo)準(zhǔn)的名稱更改成標(biāo)準(zhǔn)的名稱。
在清洗過程中,可以一邊做一邊,使用group by語句統(tǒng)計(jì)名稱的個(gè)數(shù),觀察數(shù)據(jù)。
這個(gè)是一個(gè)體力活,其中還可能存在錯(cuò)別字等情況,反正很煩。
設(shè)計(jì)規(guī)范
規(guī)范約定
1. 遵守?cái)?shù)據(jù)的設(shè)計(jì)規(guī)范3NF 規(guī)定
· 表內(nèi)的每一個(gè)值都只能被表達(dá)一次。
· 表內(nèi)的每一行都應(yīng)該被唯一的標(biāo)識(shí)(有唯一鍵)。
· 表內(nèi)不應(yīng)該存儲(chǔ)依賴于其他鍵的非鍵信息。
2. 實(shí)體表都必須包含四個(gè)字段:編號(hào)(ID)、代碼(Code)、創(chuàng)建人(Created By)、創(chuàng)建時(shí)間(Creation Time)、修改人(Modified By)、修改時(shí)間(Modification Time)、刪除標(biāo)志(Delete Status)。其含義如下:
ü 編號(hào)是系統(tǒng)內(nèi)的唯一標(biāo)識(shí)
ü 代碼是客戶為這個(gè)實(shí)體的編碼,這個(gè)字段看需要確定是否保留
ü 創(chuàng)建人是是指數(shù)據(jù)庫記錄創(chuàng)建人
ü 創(chuàng)建時(shí)間是指數(shù)據(jù)庫記錄創(chuàng)建時(shí)間,默認(rèn)為SYSDATE
ü 修改人是是指數(shù)據(jù)庫記錄修改人
ü 修改時(shí)間是指數(shù)據(jù)庫記錄修改時(shí)間,默認(rèn)為SYSDATE
ü 刪除標(biāo)志是本條記錄是否已刪除的標(biāo)志(0:沒有刪除;1:已經(jīng)刪除),數(shù)據(jù)中的數(shù)據(jù)不做真正刪除,只設(shè)置這個(gè)標(biāo)志
這五個(gè)字段的命名規(guī)則如下
ü 實(shí)體名+字段名稱,如user_id、user_code、created_by、creation_time、modified_by 、modification_time 、delete_status。
ü 這五個(gè)字段的類型和長度規(guī)則如下
n 編號(hào) INTEGER
n 代碼 VARCHAR2(30)
n 創(chuàng)建人 INTEGER
n 創(chuàng)建時(shí)間DATE
n 修改人 INTEGER
n 修改時(shí)間DATE
n 刪除標(biāo)志 CHAR(1)
2字段規(guī)范
一行記錄必須表內(nèi)唯一,表必須有主鍵。
枚舉類型使用 NUMBER,且需要說明枚舉類型的各個(gè)不同取值的含義
ID結(jié)尾的字段為僅由數(shù)字組成,Code結(jié)尾的字段為僅由字母或數(shù)字組成
用CHAR(1)表示布爾值的取大寫:“Y”,“N”。
應(yīng)盡量使用VARCHAR2代替CHAR類型;
VARCHAR(2)最多4000字符;
DATE精確到秒,而非天;
使用CLOB代替LONG,BLOB代替LONG RAW;
使用NUMBER數(shù)據(jù)類型時(shí)請(qǐng)給定長度,例如:NUMBER(5,2) 表示整數(shù)部分最大3位,小數(shù)部分為2位;
使用規(guī)范
1綜合
如果開發(fā)過程中需要建立索引,需要提交書面的更改請(qǐng)求,說明所需索引的定義(名稱、字段列表、順序、索引類型)以及建立的理由。數(shù)據(jù)庫管理員統(tǒng)一維護(hù)索引并將提交的請(qǐng)求更改。
數(shù)據(jù)庫各表的初始數(shù)據(jù)(包含各代碼表、配置表)需要提交給數(shù)據(jù)庫管理員。
不得使用觸發(fā)器。
涉及到數(shù)據(jù)庫多表數(shù)據(jù)的更改(Insert/Delete/Update)必須使用數(shù)據(jù)庫事務(wù)進(jìn)行控制,并且必須有完整事務(wù)開始和提交/回滾機(jī)制。不能使用范圍事務(wù)
盡量避免Union操作的使用,需要使用時(shí),請(qǐng)向數(shù)據(jù)庫管理員咨詢使用Union操作的影響。
SQL語句和存儲(chǔ)過程,盡量使用PL/SQL Develper的代碼美化器美化。
屬于ORACLE的關(guān)鍵字大小,表名、列名等小寫。
2查詢
在表查詢中,一律不要使用* 作為查詢的字段列表,需要哪些字段必須顯式寫明
在表查詢中,必須有Where條件,除非此表為非增長表
在表查詢中,一次最多返回的記錄條數(shù)不要超過1000條或記錄內(nèi)容不要大于1MB的數(shù)據(jù)。
在表查詢中,作Order By排序時(shí),優(yōu)先使用主鍵列,索引列
多表關(guān)聯(lián)查詢時(shí),優(yōu)先使用Where條件,再作表關(guān)聯(lián),并且需要保證被關(guān)聯(lián)的字段需要有索引。
避免在WHERE字句中對(duì)列施以函數(shù):
錯(cuò)誤:
SELECT service_id,service_name
FROM service_promotion
WHERE TO_CHAR(gmt_modified,’yyyy-mm-dd’) = ‘20001-09-01’;
正確:
SELECT service_id,service_name
FROM service_promotion
WHERE gmt_modified
= TO_DATE(‘2001-9-01’,’yyyy-mm-dd’)
AND gmt_modified
TO_DATE(‘2001-9-02’,’yyyy-mm-dd’);
避免使用數(shù)據(jù)庫的類型自動(dòng)轉(zhuǎn)換功能:
錯(cuò)誤:
SELECT category_id, category_name FROM category
WHERE category_id = ‘123’; -- id’s type is number
正確:
SELECT category_id, category_name FROM category
WHERE category_id = 123; -- id’s type is number
4刪除
刪除記錄時(shí),必須有Where唯一條件
當(dāng)有主從表時(shí),要先刪除從表記錄,在刪除主表記錄
5修改
修改記錄時(shí),必須有Where唯一條件
以下內(nèi)容為固定寫法,可以修改數(shù)據(jù)庫編碼格式。
第一步:通過系統(tǒng)管理員權(quán)限登錄數(shù)據(jù)庫。
sql conn / as sysdba;
第二步:關(guān)閉數(shù)據(jù)庫和實(shí)例連接。
sql shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
第三步:啟動(dòng)數(shù)據(jù)庫實(shí)例連接。
sql startup mount;
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
第四步:限制其它用戶連接數(shù)據(jù)庫使用資源。
sql alter system enable restricted session;
system altered.
第五步:設(shè)置作業(yè)進(jìn)行為0個(gè)。
sql alter system set job_queue_processes=0;
system altered.
第六步:設(shè)置啟動(dòng)時(shí)間管理器的數(shù)量為0
sql alter system set aq_tm_processes=0;
system altered.
第七步:打開數(shù)據(jù)庫連接
sql alter database open;
database altered.
第八步:修改需要的編碼格式
sql alter database character set internal_use GBK;
第九步:關(guān)閉連接。
sql shutdown immediate;
第十步:啟動(dòng)oracle進(jìn)程。
sql startup;
備注:常用的有:UTF-8,GBK 。
UTF-8:是一種針對(duì)Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson于1992年創(chuàng)建?,F(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC 3629。UTF-8用1到6個(gè)字節(jié)編碼UNICODE字符。用在網(wǎng)頁上可以同一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。