Java基礎——Oracle(五)

来源:http://www.cnblogs.com/1693977889zz/archive/2017/10/20/7701346.html
-Advertisement-
Play Games

一、Oracle 中的分頁 1) select * from emp; 2)select * ,rownum from emp; //這樣寫不行 3)select ename,job,sal,rownum from emp; //可以 ENAME JOB SAL ROWNUM SMITH CLERK ...


一、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; 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先,在正式使用Masonry之前,我們先來看看在xib中我們是如何使用AutoLayout 從圖中我們可以看出,只要設置相應得局限,控制好父視圖與子視圖之間的關係就應該很ok的拖出你需要的需求。這裡就不詳細講解具體拖拽的方法..... 然後,我們按著上圖的屬性來看看如何簡單得使用Masonry 首 ...
  • 最近公司有了一個新的需求,學生在購買課時的時候,需要讓家長或者朋友代付。這樣的話我首先想到的就是微信的H5支付(微信內置瀏覽器調用支付模塊)。當時想用這個支付的原因因為是前端代碼十分簡單。。 然而恰恰是因為自己選擇了這個方法,讓自己連續兩天陷入了困境。 下麵是正文跟代碼截圖 首先咱們先來看下H5的支 ...
  • 第一種方法:通過設置layer的屬性 最簡單的一種,但是很影響性能,一般在正常的開發中使用很少. ? 1 2 3 4 5 6 7 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, ...
  • 引言 為了後面的例子做準備,本篇及接下來幾篇將介紹Android應用程式的原理及術語,這些也是作為一個Android的開發人員必須要瞭解,且深刻理解的東西。本篇的主題如下: 1、應用程式基礎 2、應用程式組件 2.1、活動(Activities) 2.2、服務(Services) 2.3、廣播接收者 ...
  • ——工欲善其事必先利其器 引言 本系列適合0基礎的人員,因為我就是從0開始的,此系列記錄我步入Android開發的一些經驗分享,望與君共勉!作為Android隊伍中的一個新人的我,如果有什麼不對的地方,還望不吝賜教。 在開始Android開發之旅啟動之前,首先要搭建環境,然後創建一個簡單的Hello ...
  • 一:理解sql執行順序 在sql中,第一個被執行的是from語句,每一個步驟都會產生一個虛擬表,該表供下一個步驟查詢時調用,比如語句:select top 10 column1,colum2,max(column3) from user where id>1 group by column1,col ...
  • [TOC] 一、Mongodb 的許可權管理 認識許可權管理,說明主要概念及關係 與大多數資料庫一樣,Mongodb同樣提供了一套許可權管理機制。 為了體驗Mongodb 的許可權管理,我們找一臺已經安裝好的Mongodb,可以 "參照這裡" 搭建一個單節點的Mongodb。 直接打開mongo shell ...
  • 資料庫連接池 本詞條由“科普中國”百科科學詞條編寫與應用工作項目 審核 。 本詞條由“科普中國”百科科學詞條編寫與應用工作項目 審核 。 資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程式重覆使用一個現有的資料庫連接,而不是再重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...