Oracle數據庫常用Sql語句大全


一,數據控制語句 (DML) 部分

 

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 語句插入這個字段值為: 序列號的名稱.NEXTVAL

2,DELETE  (刪除數據表里記錄的語句)

DELETE FROM表名 WHERE 條件;

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

如果確實要刪除一個大表里的全部記錄, 可以用 TRUNCATE 命令, 它可以釋放占用的數據塊表空間

TRUNCATE TABLE 表名;

此操作不可回退.truncate table

3,UPDATE  (修改數據表里記錄的語句)

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

如果修改的值N沒有賦值或定義時, 將把原來的記錄內容清為NULL, 最好在修改前進行非空校驗;

值N超過定義的長度會出錯, 最好在插入前進行長度校驗..

注意事項:

A,以上SQL語句對表都加上了行級鎖,

確認完成后, 必須加上事物處理結束的命令 COMMIT 才能正式生效,否則改變不一定寫入數據庫里。

如果想撤回這些操作,可以用命令 ROLLBACK 復原。

B,在運行INSERT, DELETE 和 UPDATE 語句前最好估算一下可能操作的記錄范圍,應該把它限定在較小 (一萬條記錄) 范圍內,否則ORACLE處理這個事物用到很大的回退段。

程序響應慢甚至失去響應. 如果記錄數上十萬以上這些操作,可以把這些SQL語句分段分次完成,其間加上COMMIT 確認事物處理。

二,數據定義 (DDL) 部分

1.CREATE (創建表, 索引, 視圖, 同義詞, 過程, 函數, 數據庫鏈接等)

ORACLE常用的字段類型有

CHAR                        固定長度的字符串

VARCHAR2                可變長度的字符串

NUMBER(M,N)                數字型M是位數總長度, N是小數的長度

DATE                        日期類型

創建表時要把較小的不為空的字段放在前面, 可能為空的字段放在后面

創建表時可以用中文的字段名, 但最好還是用英文的字段名

創建表時可以給字段加上默認值, 例如 DEFAULT SYSDATE

這樣每次插入和修改時, 不用程序操作這個字段都能得到動作的時間

創建表時可以給字段加上約束條件

例如 不允許重復 UNIQUE, 關鍵字 PRIMARY KEY

2,ALTER        (改變表, 索引, 視圖等)

改變表的名稱

ALTER TABLE 表名1  TO 表名2;

在表的后面增加一個字段

ALTER TABLE表名 ADD 字段名 字段名描述;

修改表里字段的定義描述

ALTER TABLE表名 MODIFY字段名 字段名描述;

給表里的字段加上約束條件

ALTER TABLE 表名 ADD CONSTRAINT 約束名 PRIMARY KEY (字段名);

ALTER TABLE 表名 ADD CONSTRAINT 約束名 UNIQUE (字段名);

把表放在或取出數據庫的內存區

ALTER TABLE 表名 CACHE;

ALTER TABLE 表名 NOCACHE;

3,DROP (刪除表, 索引, 視圖, 同義詞, 過程, 函數, 數據庫鏈接等)

刪除表和它所有的約束條件

DROP TABLE 表名 CASCADE CONSTRAINTS;

4,TRUNCATE (清空表里的所有記錄, 保留表的結構)

TRUNCATE 表名;

 

三,查詢語句 (SELECT) 部分

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 條件;

字段名可以帶入函數

  例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名),

           TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')

NVL(EXPR1, EXPR2)函數

解釋:

IF EXPR1=NULL

                RETURN EXPR2

ELSE

                       RETURN EXPR1

DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函數

解釋:

IF AA=V1 THEN RETURN R1

IF AA=V2 THEN RETURN R2

..…

ELSE

RETURN NULL

LPAD(char1,n,char2)函數

解釋:

字符char1按制定的位數n顯示,不足的位數用char2字符串替換左邊的空位

字段名之間可以進行算術運算

例如:  (字段名1*字段名1)/3

查詢語句可以嵌套

例如: SELECT …… FROM

(SELECT …… FROM表名1, [表名2, ……] WHERE 條件) WHERE 條件2;

兩個查詢語句的結果可以做集合操作

例如: 並集UNION(去掉重復記錄), 並集UNION ALL(不去掉重復記錄), 差集MINUS,  交集INTERSECT

分組查詢

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1

[HAVING 條件] ;

兩個以上表之間的連接查詢

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE

                表名1.字段名 = 表名2. 字段名 [ AND ……] ;

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE

                表名1.字段名 = 表名2. 字段名(+) [ AND ……] ;

有(+)號的字段位置自動補空值

查詢結果集的排序操作, 默認的排序是升序ASC, 降序是DESC

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]

ORDER BY字段名1, 字段名2 DESC;

字符串模糊比較的方法

INSTR(字段名, ‘字符串’)>0

字段名 LIKE  ‘字符串%’  [‘%字符串%’]

每個表都有一個隱含的字段ROWID, 它標記着記錄的唯一性.

 

四,ORACLE里常用的數據對象 (SCHEMA)

1,索引 (INDEX)

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

ALTER INDEX 索引名 REBUILD;

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

也可以建立多字段的組合索引和基於函數的索引

ORACLE8.1.7字符串可以索引的最大長度為1578 單字節

ORACLE8.0.6字符串可以索引的最大長度為758 單字節

2,視圖 (VIEW)

CREATE VIEW 視圖名AS SELECT …. FROM …..;

ALTER VIEW視圖名 COMPILE;

視圖僅是一個SQL查詢語句, 它可以把表之間復雜的關系簡潔化.

3,同義詞 (SYNONMY)

CREATE SYNONYM同義詞名FOR 表名;

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

4,數據庫鏈接 (DATABASE LINK)

CREATE DATABASE LINK數據庫鏈接名CONNECT TO 用戶名 IDENTIFIED BY 密碼 USING ‘數據庫連接字符串’;

數據庫連接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定義。

數據庫參數global_name=true時要求數據庫鏈接名稱跟遠端數據庫名稱一樣

數據庫全局名稱可以用以下命令查出

SELECT * FROM GLOBAL_NAME;

查詢遠端數據庫里的表

SELECT …… FROM 表名@數據庫鏈接名;

 

五,權限管理 (DCL) 語句

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;

2,REVOKE 回收權限

REVOKE CONNECT, RESOURCE FROM 用戶名;

REVOKE SELECT ON 表名 FROM 用戶名;

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

查詢數據庫中第63號錯誤:

select orgaddr,destaddr from sm_histable0116 where error_code='63';

查詢數據庫中開戶用戶最大提交和最大下發數: select MSISDN,TCOS,OCOS from ms_usertable;

查詢數據庫中各種錯誤代碼的總和:

select error_code,count(*) from sm_histable0513 group by error_code order

by error_code;

查詢報表數據庫中話單統計種類查詢。

select sum(Successcount) from tbl_MiddleMt0411 where ServiceType2=111

select sum(successcount),servicetype from tbl_middlemt0411 group by servicetype

 

oracle常用SQL語句

1、連接SQL*Plus system/manager

2、顯示當前連接用戶SQL> show user

3、查看系統擁有哪些用戶SQL> select * from all_users;

4、新建用戶並授權SQL> create user a identified by a;(默認建在SYSTEM表空間下)SQL> grant connect,resource to a;

5、連接到新用戶SQL> conn a/a

6、查詢當前用戶下所有對象SQL> select * from tab;

7、建立第一個表SQL> create table a(a number);

8、查詢表結構SQL> desc a

9、插入新記錄SQL> insert into a values(1);

10、查詢記錄SQL> select * from a;

11、更改記錄SQL> update a set a=2;

12、刪除記錄SQL> delete from a;

13、回滾SQL> roll;SQL> rollback;

14、提交SQL> commit;

----------------------------------------------------------------

用戶授權:GRANT ALTER ANY INDEX TO "user_id "GRANT "dba " TO "user_id ";ALTER USER "user_id " DEFAULT ROLE ALL創建用戶:CREATE USER "user_id " PROFILE "DEFAULT " IDENTIFIED BY " DEFAULT TABLESPACE "USERS " TEMPORARY TABLESPACE "TEMP " ACCOUNT UNLOCK;GRANT "CONNECT " TO "user_id ";用戶密碼設定:ALTER USER "CMSDB " IDENTIFIED BY "pass_word "表空間創建:CREATE TABLESPACE "table_space " LOGGING DATAFILE 'C:\ORACLE\ORADATA\dbs\table_space.ora' SIZE 5M

------------------------------------------------------------------------

1、查看當前所有對象

SQL > select * from tab;

2、建一個和a表結構一樣的空表

SQL > create table b as select * from a where 1=2;

SQL > create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;

3、察看數據庫的大小,和空間使用情況

SQL > col tablespace format a20SQL > select b.file_id  文件ID,  b.tablespace_name  表空間,  b.file_name     物理文件名,  b.bytes       總字節數,  (b.bytes-sum(nvl(a.bytes,0)))   已使用,  sum(nvl(a.bytes,0))        剩余,  sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比  from dba_free_space a,dba_data_files b  where a.file_id=b.file_id  group by b.tablespace_name,b.file_name,b.file_id,b.bytes  order by b.tablespace_name  /  dba_free_space --表空間剩余空間狀況  dba_data_files --數據文件空間占用情況 4、查看現有回滾段及其狀態

SQL > col segment format a30SQL > SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;

5、查看數據文件放置的路徑

SQL > col file_name format a50SQL > select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

6、顯示當前連接用戶

SQL > show user

7、把SQL*Plus當計算器

SQL > select 100*20 from dual;

8、連接字符串

SQL > select 列1 | |列2 from 表1;SQL > select concat(列1,列2) from 表1;

9、查詢當前日期

SQL > select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;

10、用戶間復制數據

SQL > copy from user1 to user2 create table2 using select * from table1;

11、視圖中不能使用order by,但可用group by代替來達到排序目的

SQL > create view a as select b1,b2 from b group by b1,b2;

12、通過授權的方式來創建用戶

SQL > grant connect,resource to test identified by test;

SQL > conn test/test

13、查出當前用戶所有表名。

select unique tname from col;

-----------------------------------------------------------------------

/* 向一個表格添加字段 */alter table alist_table add address varchar2(100);

/* 修改字段 屬性 字段為空 */alter table alist_table modify address varchar2(80);

/* 修改字段名字 */create table alist_table_copy as select ID,NAME,PHONE,EMAIL,QQ as QQ2, /*qq 改為qq2*/ADDRESS from alist_table;

drop table alist_table;rename alist_table_copy to alist_table/* 修改表名 */

空值處理有時要求列值不能為空create table dept (deptno number(2) not null, dname char(14), loc char(13));

在基表中增加一列alter table deptadd (headcnt number(3));

修改已有列屬性alter table deptmodify dname char(20);注:只有當某列所有值都為空時,才能減小其列值寬度。只有當某列所有值都為空時,才能改變其列值類型。只有當某列所有值都為不空時,才能定義該列為not null。例:alter table dept modify (loc char(12));alter table dept modify loc char(12);alter table dept modify (dname char(13),loc char(12));

查找未斷連接select process,osuser,username,machine,logon_time ,sql_textfrom v$session a,v$sqltext b where a.sql_address=b.address;

-----------------------------------------------------------------1.以USER_開始的數據字典視圖包含當前用戶所擁有的信息, 查詢當前用戶所擁有的表信息:select * from user_tables;2.以ALL_開始的數據字典視圖包含ORACLE用戶所擁有的信息,查詢用戶擁有或有權訪問的所有表信息:select * from all_tables;

3.以DBA_開始的視圖一般只有ORACLE數據庫管理員可以訪問:select * from dba_tables;

4.查詢ORACLE用戶:conn sys/change_on_installselect * from dba_users;conn system/manager;select * from all_users;

5.創建數據庫用戶:CREATE USER user_name IDENTIFIED BY password;GRANT CONNECT TO user_name;GRANT RESOURCE TO user_name;授權的格式: grant (權限) on tablename to username;刪除用戶(或表):drop user(table) username(tablename) (cascade);6.向建好的用戶導入數據表IMP SYSTEM/MANAGER FROMUSER = FUSER_NAME TOUSER = USER_NAME FILE = C:\EXPDAT.DMP COMMIT = Y7.索引create index [index_name] on [table_name]( "column_name ")intersect運算

返回查詢結果中相同的部分

exp:各個部門中有哪些相同的工種

selectjob

fromaccount

intersect

selectjob

fromresearch

intersect

selectjob

fromsales;

 

minus運算

返回在第一個查詢結果中與第二個查詢結果不相同的那部分行記錄。

有哪些工種在財會部中有,而在銷售部中沒有?

exp:selectjobfromaccount

minus

selectjobfromsales;

1. oracle安裝完成后的初始口令? 

 internal/oracle 

  sys/change_on_install 

  system/manager 

  scott/tiger 

  sysman/oem_temp 

 

2. oracle9ias web cache的初始默認用戶和密碼? 

administrator/administrator 

 

3. oracle 8.0.5怎么創建數據庫? 

用orainst。假如有motif界面,可以用orainst /m 

 

4. oracle 8.1.7怎么創建數據庫? 

dbassist 

 

5. oracle 9i 怎么創建數據庫? 

dbca 

 

6. oracle中的裸設備指的是什么? 

裸設備就是繞過文件系統直接訪問的儲存空間 

 

7. oracle如何區分 64-bit/32bit 版本??? 

$ sqlplus '/ as sysdba' 

sql*plus: release 9.0.1.0.0 - production on mon jul 14 17:01:09 2003 

(c) copyright 2001 oracle corporation. all rights reserved. 

connected to: 

oracle9i enterprise edition release 9.0.1.0.0 - production 

with the partitioning option 

jserver release 9.0.1.0.0 - production 

sql> select * from v$version; 

banner 

---------------------------------------------------------------- 

oracle9i enterprise edition release 9.0.1.0.0 - production 

pl/sql release 9.0.1.0.0 - production 

core 9.0.1.0.0 production 

tns for solaris: version 9.0.1.0.0 - production 

nlsrtl version 9.0.1.0.0 - production 

sql> 

 

8. svrmgr什么意思? 

svrmgrl,server manager. 

9i下沒有,已經改為用sqlplus了 

sqlplus /nolog 

變為歸檔日志型的 

 

9. 請問如何分辨某個用戶是從哪台機器登陸oracle的? 

select machine , terminal from v$session; 

 

10. 用什么語句查詢字段呢? 

desc table_name 可以查詢表的結構 

select field_name,... from ... 可以查詢字段的值 

select * from all_tables where table_name like '%' 

select * from all_tab_columns where table_name='??' 

 

11. 怎樣得到觸發器、過程、函數的創建腳本? 

desc user_source 

user_triggers 

 

12. 怎樣計算一個表占用的空間的大小? 

select owner,table_name, 

num_rows, 

blocks*aaa/1024/1024 "size m", 

empty_blocks, 

last_analyzed 

from dba_tables 

where table_name='xxx'; 

here: aaa is the value of db_block_size ; 

xxx is the table name you want to check 

 

13. 如何查看最大會話數? 

select * from v$parameter where name like 'proc%'; 

sql> 

sql> show parameter processes 

name type value 

------------------------------------ ------- ------------------------------ 

aq_tm_processes integer 1 

db_writer_processes integer 1 

job_queue_processes integer 4 

log_archive_max_processes integer 1 

processes integer 200 

這里為200個用戶。 

select * from v$license; 

其中sessions_highwater紀錄曾經到達的最大會話數 

 

14. 如何查看系統被鎖的事務時間? 

select * from v$locked_object ; 

 

15. 如何以archivelog的方式運行oracle。 

init.ora 

log_archive_start = true 

restart database 

 

16. 怎么獲取有哪些用戶在使用數據庫 

select username from v$session; 

 

17. 數據表中的字段最大數是多少? 

表或視圖中的最大列數為 1000 

 

18. 怎樣查得數據庫的sid ? 

select name from v$database; 

也可以直接查看 init.ora文件 

 

19. 如何在oracle服務器上通過sqlplus查看本機ip地址 ? 

select sys_context('userenv','ip_address') from dual; 

假如是登陸本機數據庫,只能返回127.0.0.1,呵呵 

 

20. unix 下怎么調整數據庫的時間? 

su -root 

date -u 08010000 

 

21. 在oracle table中如何抓取memo類型字段為空的數據記錄? 

select remark from oms_flowrec where trim(' ' from remark) is not null ; 

 

 

22. 如何用bbb表的數據去更新aaa表的數據(有關聯的字段) 

up2003-10-17 aaa set bns_snm=(select bns_snm from bbb where aaa.dpt_no=bbb.dpt_no) where bbb.dpt_no is not null; 

 

23. p4計算機安裝方法 

將symcjit.dll改為sysmcjit.old 

 

24. 何查詢server是不是ops? 

select * from v$option; 

假如parallel server=true則有ops能 

 

25. 何查詢每個用戶的權限? 

select * from dba_sys_privs; 

 

26. 如何將表移動表空間? 

alter table table_name move tablespace_name; 

 

27. 如何將索引移動表空間? 

alter index index_name rebuild tablespace tablespace_name; 

 

28. 在linux,unix下如何啟動dba studio? 

oemapp dbastudio 

 

29. 查詢鎖的狀況的對象有? 

v$lock, v$locked_object, v$session, v$sqlarea, v$process ; 

查詢鎖的表的方法: 

select s.sid session_id, s.username, decode(lmode, 0, 'none', 1, 'null', 2, 'row-s (ss)', 3, 'row-x (sx)', 4, 'share', 5, 's/row-x (ssx)', 6, 'exclusive', to_char(lmode)) mode_held, decode(request, 0, 'none', 1, 'null', 2, 'row-s (ss)', 3, 'row-x (sx)', 4, 'share', 5, 's/row-x (ssx)', 6, 'exclusive', to_char(request)) mode_requested, o.ccbzzp||'.'||o.object_name||' ('||o.object_type||')', s.type lock_type, l.id1 lock_id1, l.id2 lock_id2 from v$lock l, sys.dba_objects o, v$session s where l.sid = s.sid and l.id1 = o.object_id ; 

 

30. 如何解鎖? 

alter system kill session ‘sid,serir#’; 

 

31. sqlplus下如何修改編輯器? 

define _editor="" -- 必須加上雙引號 

來定義新的編輯器,也可以把這個寫在$oracle_home/sqlplus/admin/glogin.sql里面使它永久有效。 

 

32. oracle產生隨機函數是? 

dbms_random.random 

 

33. linux下查詢磁盤競爭狀況命令? 

sar -d 

 

33. linux下查詢cpu競爭狀況命令? 

sar -r 

 

34. 查詢當前用戶對象? 

select * from user_objects; 

select * from dba_segments; 

 

35. 如何獲取錯誤信息? 

select * from user_errors; 

 

36. 如何獲取鏈接狀況? 

select * from dba_db_links; 

 

37. 查看數據庫字符狀況? 

select * from nls_database_parameters; 

select * from v$nls_parameters; 

 

38. 查詢表空間信息? 

select * from dba_data_files; 

 

39. oracle的interal用戶要口令? 

修改 sqlnet.ora 

sqlnet.authentication_services=(nts) 

 

40. 出現java.exe的解決辦法? 

一般是將oracleorahomexihttpserver改成手工啟動可以的 

x是8或9 

 

41. 如何給表、列加注釋? 

sql>comment on table 表 is '表注釋'; 

注釋已創建。 

sql>comment on column 表.列 is '列注釋'; 

注釋已創建。 

sql> select * from user_tab_comments where comments is not null; 

 

42. 如何查看各個表空間占用磁盤情況? 

sql> col tablespace format a20 

sql> select 

b.file_id 文件id號, 

b.tablespace_name 表空間名, 

b.bytes 字節數, 

(b.bytes-sum(nvl(a.bytes,0))) 已使用, 

sum(nvl(a.bytes,0)) 剩余空間, 

sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 

from dba_free_space a,dba_data_files b 

where a.file_id=b.file_id 

group by b.tablespace_name,b.file_id,b.bytes 

order by b.file_id 

43. 如把oracle設置為mts或專用模式? 

#dispatchers="(protocol=tcp) (service=sidxdb)" 

加上就是mts,注釋就是專用模式,sid是指你的實例名。 

 

44. 如何才能得知系統當前的scn號 ? 

select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe; 

 

45. 請問如何在oracle中取毫秒? 

9i之前不支持,9i開始有timestamp. 

9i可以用select systimestamp from dual; 

 

大家在應用oracle的時候可能會碰到很多看起來不難的問題, 非凡對新手來說, 今天我簡單把它總結一下, 發布給大家, 希望對大家有幫助! 和大家一起探討, 共同進步! 

 

對oracle高手來說是不用看的. 

 

46. 如何在字符串里加回車? 

select 'welcome to visit'||chr(10)||'www.csdn.net' from dual ; 

 

47. 中文是如何排序的? 

oracle9i之前,中文是按照二進制編碼進行排序的。 

在oracle9i中新增了按照拼音、部首、筆畫排序功能。設置nls_sort值 

schinese_radical_m 按照部首(第一順序)、筆划(第二順序)排序 

schinese_stroke_m 按照筆划(第一順序)、部首(第二順序)排序 

schinese_pinyin_m 按照拼音排序 

 

48. oracle8i中對象名可以用中文嗎? 

可以 

 

49. 如何改變win中sql*plus啟動選項? 

sql*plus自身的選項設置我們可以在$oracle_home/sqlplus/admin/glogin.sql中設置。 

 

50. 怎樣修改oracel數據庫的默認日期? 

alter session set nls_date_format='yyyymmddhh24miss'; 

or 

可以在init.ora中加上一行 

nls_date_format='yyyymmddhh24miss' 

 

51. 如何將小表放入keep池中? 

alter table xxx storage(buffer_pool keep); 

 

52. 如何檢查是否安裝了某個patch? 

check that orainventory 

 

53. 如何使select語句使查詢結果自動生成序號? 

select rownum,col from table; 

 

54. 如何知道數據褲中某個表所在的tablespace? 

select tablespace_name from user_tables where table_name='test'; 

select * from user_tables中有個字段tablespace_name,(oracle); 

select * from dba_segments where …; 

 

55. 怎么可以快速做一個和原表一樣的備份表? 

create table new_table as (select * from old_table); 

 

55. 怎么在sqlplus下修改procedure? 

select line,trim(text) t from user_source where name =’a’ order by line; 

 

56. 怎樣解除procedure被意外鎖定? 

alter system kill session ,把那個session給殺掉,不過你要先查出她的session id 

or 

把該過程重新改個名字就可以了。 

 

57. sql reference是個什么東西? 

是一本sql的使用手冊,包括語法、函數等等,oracle官方網站的文檔中心有下載. 

 

58. 如何查看數據庫的狀態? 

unix下 

ps -ef | grep ora 

windows下 

看服務是否起來 

是否可以連上數據庫 

 

59. 請問如何修改一張表的主鍵? 

alter table aaa 

drop constraint aaa_key ; 

alter table aaa 

add constraint aaa_key primary key(a1,b1) ; 

 

60. 改變數據文件的大小? 

用 alter database .... datafile .... ; 

手工改變數據文件的大小,對於原來的 數據文件有沒有損害。 

 

61. 怎樣查看oracle中有哪些程序在運行之中? 

查看v$sessions表 

 

62. 怎么可以看到數據庫有多少個tablespace? 

select * from dba_tablespaces; 

 

63. 如何修改oracle數據庫的用戶連接數? 

修改initsid.ora,將process加大,重啟數據庫. 

 

64. 如何查出一條記錄的最后更新時間? 

可以用logminer 察看 

 

65. 如何在pl/sql中讀寫文件? 

utl_file包答應用戶通過pl/sql讀寫操作系統文件。 

 

66. 怎樣把“&”放入一條記錄中? 

insert into a values (translate ('at{&}t','at{}','at')); 

 

67. exp 如何加query參數? 

exp user/pass file=a.dmp tables(bsempms) 

query='"where emp_no="'s09394"'"" ﹔ 

 

68. 關於oracle8i支持簡體和繁體的字符集問題? 

zhs16gbk可以支 

 

69. data guard是什么軟件? 

就是standby的換代產品 

 

70. 如何創建spfile? 

sql> connect / as sysdba 

sql> select * from v$version; 

sql> create pfile from spfile; 

sql> create spfile from pfile='e:"ora9i"admin"eygle"pfile"init.ora'; 

文件已創建。 

sql> create spfile='e:"ora9i"database"spfileeygle.ora' from pfile='e:"ora9i"admin"eygle"pfile"init.ora'; 

文件已創建。 

 

71. 內核參數的應用? 

shmmax 

  含義:這個設置並不決定究竟oracle數據庫或者操作系統使用多少物理內存,只決定了最多可以使用的內存數目。這個設置也不影響操作系統的內核資源。 

  設置方法:0.5*物理內存 

  例子:set shmsys:shminfo_shmmax=10485760 

  shmmin 

  含義:共享內存的最小大小。 

  設置方法:一般都設置成為1。 

  例子:set shmsys:shminfo_shmmin=1: 

  shmmni 

  含義:系統中共享內存段的最大個數。 

  例子:set shmsys:shminfo_shmmni=100 

  shmseg 

  含義:每個用戶進程可以使用的最多的共享內存段的數目。 

  例子:set shmsys:shminfo_shmseg=20: 

  semmni 

  含義:系統中semaphore identifierer的最大個數。 

  設置方法:把這個變量的值設置為這個系統上的所有oracle的實例的init.ora中的最大的那個processes的那個值加10。 

  例子:set semsys:seminfo_semmni=100 

  semmns 

  含義:系統中emaphores的最大個數。 

  設置方法:這個值可以通過以下方式計算得到:各個oracle實例的initsid.ora里邊的processes的值的總和(除去最大的processes參數)+最大的那個processes×2+10×oracle實例的個數。 

  例子:set semsys:seminfo_semmns=200 

  semmsl: 

  含義:一個set中semaphore的最大個數。 

  設置方法:設置成為10+所有oracle實例的initsid.ora中最大的processes的值。 

  例子:set semsys:seminfo_semmsl=-200 

72. 怎樣查看哪些用戶擁有sysdba、sysoper權限? 

sql>conn sys/change_on_install 

sql>select * from v_$pwfile_users; 

 

73. 如何單獨備份一個或多個表? 

exp 用戶/密碼 tables=(表1,…,表2) 

 

74. 如何單獨備份一個或多個用戶? 

exp system/manager owner=(用戶1,用戶2,…,用戶n) file=導出文件 

 

75. 如何對clob字段進行全文檢索? 

select * from a where dbms_lob.instr(a.a,'k',1,1)>0; 

 

76. 如何顯示當前連接用戶? 

show user 

 

77. 如何查看數據文件放置的路徑 ? 

col file_name format a50 

sql> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; 

 

78. 如何查看現有回滾段及其狀態 ? 

sql> col segment format a30 

sql> select segment_name,ccbzzp,tablespace_name,segment_id,file_id,status from dba_rollback_segs 

 

79. 如何改變一個字段初始定義的check范圍? 

sql> alter table xxx drop constraint constraint_name; 

之后再創建新約束: 

sql> alter table xxx add constraint constraint_name check(); 

 

80. oracle常用系統文件有哪些? 

通過以下視圖顯示這些文件信息:v$database,v$datafile,v$logfile v$controlfile v$parameter; 

 

81. 內連接inner join? 

select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no; 

 

82. 如何外連接? 

select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+); 

select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no; 

 

83. 如何執行腳本sql文件? 

sql>@$path/filename.sql; 

 

84. 如何快速清空一個大表? 

sql>truncate table table_name; 

 

85. 如何查有多少個數據庫實例? 

sql>select * from v$instance; 

 

86. 如何查詢數據庫有多少表? 

sql>select * from all_tables; 

 

87. 如何測試sql語句執行所用的時間? 

sql>set timing on ; 

sql>select * from tablename; 

88. chr()的反函數是? 

ascii() 

select char(65) from dual; 

select ascii('a') from dual; 

 

89. 字符串的連接 

select concat(col1,col2) from table ; 

select col1||col2 from table ; 

 

90. 怎么把select出來的結果導到一個文本文件中? 

sql>spool c:"abcd.txt; 

sql>select * from table; 

sql >spool off; 

 

91. 怎樣估算sql執行的i/o數 ? 

sql>set autotrace on ; 

sql>select * from table; 

or 

sql>select * from v$filestat ; 

可以查看io數 

 

92. 如何在sqlplus下改變字段大小? 

alter table table_name modify (field_name varchar2(100)); 

改大行,改小不行(除非都是空的) 

 

93. 如何查詢某天的數據? 

select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-dd'); 

 

94. sql 語句如何插入全年日期? 

create table bsyear (d date); 

insert into bsyear 

select to_date('20030101','yyyymmdd')+rownum-1 

from all_objects 

where rownum 

 

95. 假如修改表名? 

alter table old_table_name rename to new_table_name; 

 

96. 如何取得命令的返回狀態值? 

sqlcode=0 

 

97. 如何知道用戶擁有的權限? 

select * from dba_sys_privs ; 

 

98. 從網上下載的oracle9i與市場上賣的標准版有什么區別? 

從功能上說沒有區別,只不過oracle公司有明文規定;從網站上下載的oracle產品不得用於 商業用途,否則侵權。 

 

99. 怎樣判定數據庫是運行在歸檔模式下還是運行在非歸檔模式下? 

進入dbastudio,歷程--〉數據庫---〉歸檔查看。 

 

100. sql>startup pfile和ifile,spfiled有什么區別? 

pfile就是oracle傳統的初始化參數文件,文本格式的。 

ifile類似於c語言里的include,用於把另一個文件引入 

spfile是9i里新增的並且是默認的參數文件,二進制格式 

startup后應該只可接pfile 

 

101. 如何搜索出前n條記錄? 

select * from employee where rownum 

 

102. 如何知道機器上的oracle支持多少並發用戶數? 

sql>conn internal ; 

sql>show parameter processes ; 

 

103. db_block_size可以修改嗎? 

一般不可以﹐不建議這樣做的。 

 

104. 如何統計兩個表的記錄總數? 

select (select count(id) from aa)+(select count(id) from bb) 總數 from dual; 

 

105. 怎樣用sql語句實現查找一列中第n大值? 

select * from 

(select t.*,dense_rank() over (order by sal) rank from employee) 

where rank = n; 

 

 

106. 如何在給現有的日期加上2年?( 

select add_months(sysdate,24) from dual; 

 

107. used_ublk為負值表示什么意思? 

it is "harmless". 

 

108. connect string是指什么? 

應該是tnsnames.ora中的服務名后面的內容 

 

109. 怎樣擴大redo log的大小? 

建立一個臨時的redolog組,然后切換日志,刪除以前的日志,建立新的日志。 

 

110. tablespace 是否不能大於4g? 

沒有限制. 

 

111. 返回大於等於n的最小整數值? 

select ceil(n) from dual; 

 

112. 返回小於等於n的最小整數值? 

select floor(n) from dual; 

 

113. 返回當前月的最后一天? 

select last_day(sys2003-10-17) from dual; 

 

114. 如何不同用戶間數據導入? 

imp system/manager file=aa.dmp fromuser=user_old touser=user_new rows=y indexes=y ; 

 

115. 如何找數據庫表的主鍵字段的名稱? 

sql>select * from user_constraints where constraint_type='p' and table_name='table_name'; 

 

116. 兩個結果集互加的函數? 

sql>select * from bsempms_old intersect select * from bsempms_new; 

sql>select * from bsempms_old union select * from bsempms_new; 

sql>select * from bsempms_old union all select * from bsempms_new; 

 

117. 兩個結果集互減的函數? 

sql>select * from bsempms_old minus select * from bsempms_new; 

 

118. 如何配置sequence? 

建sequence seq_custid 

create sequence seq_custid start 1 incrememt by 1; 

建表時: 

create table cust 

{ cust_id smallint not null, 

...} 

insert 時: 

insert into table cust 

values( seq_cust.nextval, ...) 

 

日期的各部分的常用的的寫法 

119>.取時間點的年份的寫法: 

select to_char(sys2003-10-17,'yyyy') from dual; 

 

120>.取時間點的月份的寫法: 

select to_char(sys2003-10-17,'mm') from dual; 

 

121>.取時間點的日的寫法: 

select to_char(sys2003-10-17,'dd') from dual; 

 

122>.取時間點的時的寫法: 

select to_char(sys2003-10-17,'hh24') from dual; 

 

123>.取時間點的分的寫法: 

select to_char(sys2003-10-17,'mi') from dual; 

 

124>.取時間點的秒的寫法: 

select to_char(sys2003-10-17,'ss') from dual; 

 

125>.取時間點的日期的寫法: 

select trunc(sys2003-10-17) from dual; 

 

126>.取時間點的時間的寫法: 

select to_char(sys2003-10-17,'hh24:mi:ss') from dual; 

 

127>.日期,時間形態變為字符形態 

select to_char(sys2003-10-17) from dual; 

 

128>.將字符串轉換成日期或時間形態: 

select to_2003-10-17('2003/08/01') from dual; 

 

129>.返回參數的星期幾的寫法: 

select to_char(sys2003-10-17,'d') from dual; 

 

130>.返回參數一年中的第幾天的寫法: 

select to_char(sys2003-10-17,'ddd') from dual;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM