Oracle數據庫經常使用sql語句

Oracle數據庫經常使用sql語句

1.數據控制語句 (DML) 部分

1.1. INSERT  (往數據表裏插入記錄的語句)

INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……)  SELECT (字段名1, 字段名2, ……) FROM 另外的表名;

字符串類型的字段值必須用單引號括起來, 例如: ’GOOD DAY’
若是字段值裏包含單引號’ 須要進行字符串轉換, 咱們把它替換成兩個單引號''.
字符串類型的字段值超過定義的長度會出錯, 最好在插入前進行長度校驗.

日期字段的字段值能夠用當前數據庫的系統時間SYSDATE, 精確到秒
或者用字符串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()還有不少種日期格式, 能夠參看ORACLE DOC.
年-月-日 小時:分鐘:秒 的格式YYYY-MM-DD HH24:MI:SS

INSERT時最大可操做的字符串長度小於等於4000個單字節, 若是要插入更長的字符串, 請考慮字段用CLOB類型,
方法借用ORACLE裏自帶的DBMS_LOB程序包.

INSERT時若是要用到從1開始自動增加的序列號, 應該先創建一個序列號
CREATE SEQUENCE 序列號的名稱 (最好是表名+序列號標記) INCREMENT BY 1  START  WITH  1
MAXVALUE  99999  CYCLE  NOCACHE;
其中最大的值按字段的長度來定, 若是定義的自動增加的序列號 NUMBER(6) , 最大值爲999999
INSERT 語句插入這個字段值爲: 序列號的名稱.NEXTVALsql

1.2. DELETE  (刪除數據表裏記錄的語句)

DELETE FROM表名 WHERE 條件;

注意:刪除記錄並不能釋放ORACLE裏被佔用的數據塊表空間. 它只把那些被刪除的數據塊標成unused.

若是確實要刪除一個大表裏的所有記錄, 能夠用 TRUNCATE 命令, 它能夠釋放佔用的數據塊表空間
TRUNCATE TABLE 表名;
此操做不可回退.數據庫

1.3. UPDATE  (修改數據表裏記錄的語句)

UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 條件;

若是修改的值N沒有賦值或定義時, 將把原來的記錄內容清爲NULL, 最好在修改前進行非空校驗;
值N超過定義的長度會出錯, 最好在插入前進行長度校驗..

注意事項:
A.        以上SQL語句對錶都加上了行級鎖,
        確認完成後, 必須加上事物處理結束的命令 COMMIT 才能正式生效,
        不然改變不必定寫入數據庫裏.
        若是想撤回這些操做, 能夠用命令 ROLLBACK 復原.

B.        在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操做的記錄範圍,
        應該把它限定在較小 (一萬條記錄) 範圍內,. 不然ORACLE處理這個事物用到很大的回退段.
        程序響應慢甚至失去響應. 若是記錄數上十萬以上這些操做, 能夠把這些SQL語句分段分次完成,
        其間加上COMMIT 確認事物處理.oracle

 

 

2.ORACLE裏經常使用的數據對象 (SCHEMA)

2.1. 索引 (INDEX)

CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );ide

ALTER INDEX 索引名 REBUILD;函數

一個表的索引最好不要超過三個 (特殊的大表除外), 最好用單字段索引, 結合SQL語句的分析執行狀況,ui

也能夠創建多字段的組合索引和基於函數的索引spa

ORACLE8.1.7字符串能夠索引的最大長度爲1578 單字節.net

ORACLE8.0.6字符串能夠索引的最大長度爲758 單字節code

2.2. 視圖 (VIEW)
CREATE VIEW 視圖名AS SELECT …. FROM …..;
ALTER VIEW視圖名 COMPILE;
視圖僅是一個SQL查詢語句, 它能夠把表之間複雜的關係簡潔化.對象

2.3. 同義詞 (SYNONMY)

CREATE SYNONYM同義詞名FOR 表名;
CREATE SYNONYM同義詞名FOR 表名@數據庫連接名;

2.4. 數據庫連接 (DATABASE LINK)

CREATE [PUBLIC] DATABASE LINK 數據庫連接名 CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING '本地配置的數據的實例名';
數據庫鏈接字符串能夠用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA裏定義.
數據庫參數global_name=true時要求數據庫連接名稱跟遠端數據庫名稱同樣
數據庫全局名稱能夠用如下命令查出
SELECT * FROM GLOBAL_NAME;
查詢遠端數據庫裏的表
SELECT …… FROM 表名@數據庫連接名; 

 

2.5. 數據庫臨時表(會話級和事務級)

會話級的臨時表由於這這個臨時表中的數據和你的當前會話有關係,當你當前SESSION 不退出的狀況下,臨時表中的數據就還存在,而當你退出當前SESSION 的時候,臨時表中的數據就所有沒有了,固然這個時候你若是以另一個SESSION 登錄的時候是看不到另一個SESSION 中插入到臨時表中的數據的。即兩個不一樣的SESSION 所插入的數據是互不相干的。當某一個SESSION 退出以後臨時表中的數據就被截斷(truncate table ,即數據清空)了。會話級的臨時表建立方法:

Create Global Temporary Table Table_Name  (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ;  

舉例:

create global temporary table Student  (Stu_id Number(5),  Class_id Number(5),  Stu_Name Varchar2(8),  Stu_Memo varchar2(200)) on Commit Preserve Rows ;   2) 事務級臨時表是指該臨時表與事務相關,當進行事務提交或者事務回滾的時候,臨時表中的數據將自行被截斷,其餘的內容和會話級的臨時表的一致(包括退出SESSION 的時候,事務級的臨時表也會被自動截斷)。事務級臨時表的建立方法:

Create Global Temporary Table Table_Name  (Col1 Type1,Col2 Type2...) On Commit Delete Rows ;  

舉例:

create global temporary table Classes   

(Class_id Number(5),   

Class_Name Varchar2(8),   

Class_Memo varchar2(200)) on Commit delete Rows ; 

3.權限管理 (DCL) 語句

 

3.1.GRANT 賦予權限

經常使用的系統權限集合有如下三個:

CONNECT(基本的鏈接), RESOURCE(程序開發), DBA(數據庫管理)
經常使用的數據對象權限有如下五個:
ALL         ON 數據對象名,         SELECT ON 數據對象名,         UPDATE ON 數據對象名,
DELETE         ON 數據對象名,  INSERT ON 數據對象名,   ALTER  ON 數據對象名

GRANT CONNECT, RESOURCE TO 用戶名;
GRANT SELECT ON 表名 TO 用戶名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用戶名1, 用戶名2;

 

3.2.REVOKE 回收權限

 

REVOKE CONNECT, RESOURCE FROM 用戶名;
REVOKE SELECT ON 表名 FROM 用戶名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用戶名1, 用戶名2;

 

4.開發中常常用到的語句

4.1.oracle數據泵導入導出語句

 

expdp orauser/5tgb6yhn@bairuidb directory=DATA_PUMP_DIR dumpfile=orauser2012070501000.dmp schemas=orauser  nologfile=Y;

導出語句說明:orauser/5tgb6yhn@bairuidb爲用戶/密碼@SIDdumpfile=orauser2012070501000.dmp爲導出的數據庫文件名,能夠隨便起,建議以「導出用戶名+年月日時分」爲名。schemas=orauser爲導出的用戶,即咱們導出那個用戶的東西。

 

Impdp  system/system@bairuidb  directory=DATA_PUMP_DIR dumpfile=orauser2012070501000.dmp remap_schema=orauser:oratest 

導入語句說明:system/system@bairuidb爲導入的用戶/密碼@SID,

dumpfile=orauser2012070501000.dmp爲導出的數據庫文件名,

remap_schema=orauser:oratest爲導出用戶:導入用戶。

 

4.2.建立用戶,指定表空間,賦權限

--建立表空間

create  tablespace 表空間名xxx datafile  'XXXXX.DBF'

size  10M autoextend  on ;

 

----建立用戶並指定表空間

create user xxxxx identified by "xxx" default tablespace 表空間名;

 

alter user oratest0812 account unlock; ---通常不執行

 grant connect,resource,dba,create any sequence,create any type to xxxxxx;

 

4.3.經常使用的查詢sql

如何查詢某個用戶的權限:

select * from dba_sys_privs;

刪除重複的數據:

 

DELETE 
  FROM table_name a 
  WHERE rowid > ( SELECT min(rowid) 
  FROM table_name b 
  WHERE b.id = a.id and b.name=a.name);

 

oracle ORA-39087

只須要執行如下權限便可:GRANT READ,WRITE ON DIRECTORY DATA_PUMP_DIR to xxx;

 

oracle 11導出空表解決方案:

相關文章
相關標籤/搜索