1. 程式人生 > >Java基礎——Oracle(五)

Java基礎——Oracle(五)

file get 沒有 當前日期 _for 結構 earch 導入 數據庫管理

一、Oracle 中的分頁

1) select * from emp;

2)select * ,rownum from emp; //這樣寫不行

3)select ename,job,sal,rownum from emp; //可以

ENAME JOB SAL ROWNUM
---------- --------- --------- ----------
SMITH CLERK 800.00 1
ALLEN SALESMAN 1600.00 2
WARD SALESMAN 1250.00 3
JONES MANAGER 2975.00 4

4)select a1.*,rownum from (select * from emp) a1 ;

5)select a1.*,rownum from (select * from emp) a1 and rownum <=10 ; //只查前10條 用過一次,就不能再用第二次

6)select * from (select a1.*,rownum 行號 from (select * from emp) a1 where rownum <=10) where 行號>=5; 查的是5到10條

查詢的變化,如果有改動,只要改變裏面的查詢即可,不管是排序,還是指定列查詢

二、Oracle 中的函數

1.字符串函數

--lower (char) // select lower(‘AAA‘) from dual; ->aaa

--upper(char)

--length() //select length(‘AAA‘) from dual -> 3

--substr(char,m,n) 取子串

--replace(char1,search_string,replace_string) //顯示所有emp姓名,用 a 替換所有的 A -> select replace(ename,‘A‘,‘a‘) from emp;

--instr(char1,char2,[,n[,m]] 取子串在字符串中的位置

2.數學函數

--round(n,[m]) 四舍五入,省掉m則四舍五入到整數,如果m為正,則四舍五入到小數點的m位後,如果m是負數,則舍入到小數點的m位前

--trunc (n,[m]) 用於截取數字,省m則截掉小數部分,如果m為正,則四舍五入到小數點的m位後,如果m是負數,則舍入到小數點的m位前

--mod(m,n) 求模

--floor(n) 反回小於或是等於 n的最大整數

--ceil(n) 反回大於或是等於n 的最小整數

3.日期函數

--sysdate 返回系統時間 select sysdate from dual; mysql 用 now() , sqlserver 用 getDate()

--add_month(d,n) //查找已經入職 8 個月多的員工 select * from scott.emp where sysdate>add_months(hiredate,8);

--last_month(d) 返回指定日期所在月份的最後一天 //這個d 就是指定的日期

4.轉換函數

用於將數據從一種類型轉換成別一種在某些情況下,oracle server 允許值的數據類型和實際的不一樣,這時oracle 會隱含的轉變數據類型。比如 可以將 ‘11‘ 傳給 number類型。

反之也可以,將11 傳給 varchar2日期是否可以顯示時分秒?貨幣可否加 貨幣符號

SQL> select ename,to_char(hiredate,‘yyyy-mm-dd hh24:mi:ss‘) from scott.emp;
// 本例沒寫錯,上面的確實是 hh24,並且 那個地方確實是 mi

yyyy 表示 年份

mm 表示 月份

dd 表示 天

hh24 表示 小時

mi 表示 分鐘

ss 表示 秒

如果要寫成 yyyy-MM-dd hh:mm:ss 這樣就不對了,因為 Oracle 的爛格式很特

5.系統函數

SYS_context(‘...‘,‘...‘) //返回一個指定namespace下的parameter值。該函數可以在SQL和PL/SQL語言中使用。以下的例 子都要寫成 select sys_context(‘userenv‘,‘xxxx‘) from dual 這樣的方式:

1 terminal 當前會話客戶所對應的終端的標識符 select sys_context(‘userenv‘,‘terminal‘) from dual; -> AAA-74B992CC317

2 language 語言 ->SIMPLIFIED CHINESE_CHINA.ZHS16GBK

3 db_name 當前數據庫名稱 ->orcl

4 nls_date_format 當前會話所對應的日期格式 ->DD-MON-RR

5 session_user 當前會話所對應的數據庫用戶名 ->SA

6 current_schema 當前會話客戶所對應的默認方案名 SA

7 host 返回數據庫所在的主機名稱 ->WORKGROUP\AAA-74B992CC317

三、關於 dual 的說明

如下查詢 select 10+5 ; 可以發現出錯: 未找到要求的from 關鍵字,但這樣的寫法在mysql或sqlserver都是可以的,在oracle 中 要改寫成 select 10+5 from dual

T-SQL是SQL Server的語言引擎,而Oracle的語言引擎卻是 PLSQL。

這兩種查詢語言都對ANSI SQL-92標準進行了擴展以提供額外的支持力度。

用PLSQL執行數據查詢的時候,FROM子句是必須的,這同SQL Server的要求是不一樣的。

SELECT語句必須選擇針對的數據表。在Oracle數據庫內有一種特殊的表Dual。

Dual表是Oracle中的一個實際存在的表,任何用戶均可讀取,常用在沒有目標表的select中Dual表由Oracle連同數據字典一同創建,所有的用戶都可以用名稱DUAL訪問該表。這個表裏只有一列dummy,該列定義為VARCHAR2(1)類型,有一行值X。從DUAL表選擇數據常被用來通過SELECT語句計算常數表達式,由於DUAL只有一行數據,所以常數只返回一次。

==幾個常見的查詢

//查看當前連接的用戶
select user from dual;
//查看當前日期
select user from dual;

==幾個常見的查詢操作

//用查詢結果創建新表
create table T(id,name,sal, deptno)  as select empno,ename,sal,deptno from emp;
//使用特定的格式插入日期 (使用 to_date 函數)
insert into emp values (2000,‘張三‘,‘XXX‘,9000,to_date(‘1999-12-15‘,‘yyyy-MM-dd‘),3000,500,20); 
//使用子查詢插入數據
//例子 : 把emp表中某些符合條件的數據,導入到 T2表中
create table T2(id number(5), stuName varchar2(20),deptNo number(5) ) ;
insert into T2 (id,stuName,deptNO) select empno,ename,deptNO from emp where sal <2000
//使用子查詢更新數據
//例子 希望工 scott 的 崗位,工資,獎金 和smith 一樣
update emp set (job,sal,comm) =(select job,sal,comm from emp where ename=‘SCOTT‘) where ename=‘SMITH‘; 

四、關於 sys 和 system用戶

用戶和方案的關系 一個用戶被創建以後,會創建一個對應的方案,和用戶名一樣,方案裏裝的數據對象(表,視圖,序列....)

數據庫管理員

每個oracle都有一個或多個dba ,他的主要工作是什麽

1 安裝和升級oracle數據庫

2 建庫,建表空間,建表,視圖,索引

3 定制並實施備份計算和恢復計劃

4 數據庫的權限管理,調優故障處理

5 高級dba 能參與項目開發,會寫sql語句,存儲過程,觸發器,函數,約束等

管理員管理數據庫用的用戶是 sys 和 system

最主要的區別 :存儲的數據的重要性不同

sys: 所有的數據字典和基表和視圖都放在sys用戶中,這些東西對oracle的運行是至關重要的,由數據庫自已維護,任何用戶都不能修改,sys 用戶擁有 dba,sysdab,sysoper 角色或權限 ,是高權限用戶

sysdba >sysoper >dba

system 用於存放次一級的數據, 比如orcle 的一些特性或工具的管理信息,它有dba,sysdba 角色或權限

sys用戶必須以 as sysdba 或 sysoper 的方式登錄 不能normal 方式登錄

system 可以以sysdba 的身份登錄的,如果以這樣的方式登錄,其實登錄的就是sys

五、數據庫(表)的邏輯備分與恢復

邏輯備份: 用工具 export 將數據對象的結構和數據以文件的方式導出的過程

邏輯恢復: 用工具 import 從備份的文件把數據對象恢復的過程

物理備份和恢復: 在數庫open 的狀態下或關閉的狀態下均可進行,但邏輯備份和恢復必須在open的狀態的才能進行

== 導出

分三種 導出表 ,導出方案, 導出數據庫 //用戶和方案的關系:一個用戶創建以後,對應著一個方案,方案名和用戶名一樣,方案裏裝的是數據對象

導出用 exp 命令 ,它有很多常用的選項

-- userid 用於指定執行導出操作的用戶名,口令,連接字符串 //scott/scott@orcl

-- tables 用於指定要導出的表

-- owner 執行導出操作的方案

-- full=y 指定導出的是整個數據庫

-- inctype 指導出操作的增量類型

-- rows 指定導出操作是否要導出表中的數據 // rows=n 表示不導出數據,只導出表結構

-- file 指定文件名

--導出表

1) 導出自己的表 比如 scott 導出自已的 emp 和 dept 表

exp userid=scott/scott@orcl tables=(emp,dept) file="c:\scott.dmp"
//註意 export 是oracle帶的工具,在 C:\oracle\product\10.2.0\db_2\bin 目錄下 叫 exp.exe

2) 導出其他方案中的表

要導出其他方案中的表,要有dba 的權限或 exp_full_database 權限

3) 導出表結構

在上面的操作後面加上 rows=n 即可

4) 使用直接導出的方式

在上面的語句後面加上 direct=y 即可

速度快,數據量大的時候適用,但要求 數據庫的字符集和客戶端的字符集一致,否則會報錯

== 導入

導入有導入表,導入方案,導入數據庫

導入用的命令是 imp

常用的選項

-- userid 指定導入用的用戶名和密碼連接串

-- tables 執行導入的表

-- fromuser 指定源用戶

-- touser :指定目標用戶

-- file 指定要導入的文件名

-- inctype 指導入操作的增量類型

-- rows 指定導入操作是否要導入表中的數據 //rows=n 表示不導入數據,只導入表結構

-- ignore 如果表存在,則只導入數據

導入表

1) 導入自己的表

imp userid=scott/scott@orcl tables=(emp,dept) file=c:\scott.dmp

2) 把某個或某些表導給其他用戶

imp userid=system/system@orcl tables=(dept,emp)  file=c:\scott.dmp touser=zs
//這裏不要加 scott.  還有,要註意約束造成的問題

3 導入表結構

imp userid=scott/scott@orcl tables=(emp,dept) file=c:\scott.dmp rows =n

4) 導入數據

imp userid=scott/scott@orcl tables=(emp,dept) file=c:\scott.dmp ignore=y

導入方案

1) 導入自己的方案

imp userid=scott/scott file=d:\xxx.dmp;

2) 導入其他方案

imp userid system/aaaaaaaa file=d:\xxx.dmp fromuser=system touser=scott;

3) 導入數據庫

imp userid system/aaaaaaaa  full=y  file=c:\database.dmp; 

Java基礎——Oracle(五)