當前位置:首頁 » 數字幣問答 » oracle數字貨幣

oracle數字貨幣

發布時間: 2022-06-26 11:04:08

㈠ Oracle里顯示數字為貨幣時用tochar怎麼指定貨幣符號

select '¥'||to_char(trunc(400000.8888,2),'999,999.00') from al


select to_char(trunc(400000.8888,2),'L999,999.00') from al
(L(本地貨幣符號),要設置)

㈡ oracle有哪些字元集和語言

一、什麼是oracle字元集 Oracle字元集是一個位元組數據的解釋的符號集合,有大小之分,有相互的包容關系。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索數據。它使資料庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日歷自動適應本地化語言和平台。 影響oracle資料庫字元集最重要的參數是NLS_LANG參數。它的格式如下: NLS_LANG = language_territory.charset 它有三個組成部分(語言、地域和字元集),每個成分控制了NLS子集的特性。其中: Language 指定伺服器消息的語言,territory 指定伺服器的日期和數字格式,charset 指定字元集。如:AMERICAN _ AMERICA. ZHS16GBK 從NLS_LANG的組成我們可以看出,真正影響資料庫字元集的其實是第三部分。所以兩個資料庫之間的字元集只要第三部分一樣就可以相互導入導出數據,前面影響的只是提示信息是中文還是英文。 二、 很多人都碰到過因為字元集不同而使數據導入失敗的情況。這涉及三方面的字元集,一是oracel server端的字元集,二是oracle client端的字元集;三是dmp文件的字元集。在做數據導入的時候,需要這三個字元集都一致才能正確導入。 1、查詢oracle server端的字元集 有很多種方法可以查出oracle server端的字元集,比較直觀的查詢方法是以下這種:SQL>select userenv('language') from al; 結果類似如下:AMERICAN _ AMERICA. ZHS16GBK

㈢ Oracle11g中,如何用TO_CHAR()函數將數字轉換為帶人民幣符號的貨幣格式

剛才試驗了一下,
第一個結果是 RMB1,234
第二個跟第一個一樣
第三個是 ¥1,234

你實在想要結果的話,可以

select '¥'||1234 from al
----補充----
運行在XP上,版本是9i,字元集就是默認的那個

unix上的話我可以周一幫你看一下,現在沒環境

㈣ oracle中,用什麼數據類型表示貨幣的數據類型

Oracle中的數據類型有:字元型、數字型、日期型等。具體介紹如下:

字元型:

char(n):用於標識固定長度的字元串。

當實際數據不足定義長度時,使用空格補全右邊不足位。varchar(n):可變字元串類型。

為SQL標准規定的,資料庫必須實現的數據據類型。可以存儲空字元串。

varchar2(n):可變字元串類型,是oracle在varchar的基礎上自行定義的可變長度字元串類型。當做為列類型使用時,最大長度可被定義為4000;當做為變數類型使用時,長度可被定義為32767。不可以存儲空字元串。

(4)oracle數字貨幣擴展閱讀:

數據元一般由對象類、特性和表示3部分組成:

(1)對象類(Object Class)。是現實世界或抽象概念中事物的集合,有清楚的邊界和含義,並且特性和其行為遵循同樣的規則而能夠加以標識。

(2)特性(Property)。是對象類的所有個體所共有的某種性質,是對象有別於其他成員的依據。

(3)表示(Representation)。是值域、數據類型、表示方式的組合,必要時也包括計量單位、字元集等信息。

對象類是我們所要研究、收集和存儲相關數據的實體,例如人員、設施、裝備、組織、環境、物資等。特性是人們用來區分、識別事物的一種手段,例如人員的姓名、性別、身高、體重、職務,坦克的型號、口徑、高度、長度、有效射程等。

表示是數據元被表達的方式的一種描述。表示的各種組成成分中,任何一個部分發生變化都將產生不同的表示,例如人員的身高用「厘米」或用「米」作為計量單位,就是人員身高特性的兩種不同的表示。

㈤ 數字貨幣etp是什麼意思

數字貨幣etp就是交易平台的幣,也叫做元界幣,屬於一個去中心化的公有鏈的項目,是一個比較早期的項目,有自己的交易平台的同時話上線了比特兒交易所,並且項目早就已經在主網上線了,採用的演算法是POW以及DPOS共識機制的演算法,團隊也是比較早期的研究區塊鏈的人員,並且還獲得了早期的投資。

元界

元界是一個主打應用開發的底層公鏈的項目,並且還在生態當中加入了智能資產(Smart Property)、數字身份(Avatar)以及預言機(Oracle)等功能,用戶可以在元界上面登記和發行數字資產,從而來實現在區塊鏈上的價值的轉移。未來還將會逐步對項目開源,並且嘗試為企業級的用戶提供技術和商業支持的服務。元界鏈上的數字資產是無需信任的,可以自由注冊,發行,轉移,存放以及作用於抵押和燒毀。資產的流通是非常便捷的,在金融資產交易的領域有著廣泛的應用前景。通過Avatar數字身份的功能,任何人都可以在元界區塊鏈上擁有智能資產。所有應用價值的信息,都將會以密碼學的方式來進行加密,除非Avatar持有人授權的話,否則任何人都是無法獲取用戶的加密信息的,非常的安全。Oracle預言機功能在元界區塊鏈中起到的是價值中介的作用,通過託管 Oracle,可以保管現實形態的資產,然後再在鏈上發行與之相對應的數字資產,使得現實資產的映射上鏈變得非常的便捷。元界的錢包是一個在線的網頁錢包,並且還可以兼容傳統的PC平台。用戶可以通過在元界錢包存儲元界的資產,或者是進行專有資產的交易與發行。元界項目在資產發行以及交易領域都是有所布局的,獨特的預言機功能還可以聯通現實世界資產,大大增強了項目的落地場景。

㈥ etp是什麼幣

熵幣是Metaverse元界代幣的名稱,Entropy英文縮寫為etp幣,也可稱為元界幣。元界是一個去中心化的公有區塊鏈項目,元界生態的技術架構中包含了智能資產(Smart Property)、數字身份(Avatar)和價值中介(Oracle),項目將支持社區在其公有區塊鏈上開發基於智能資產的各種金融和生活應用。元界項目早期由維優的團隊開發和維護,當項目達到一定的成熟度,其代碼將被開源公布在GitHub上,而維優團隊將在元界區塊鏈上開發BAAS的平台,為企業級用戶提供技術和商業支持服務。
ETP並不是一種新形式的數字貨幣,它代表Metaverse的股權。因此,ETP的價格不會錨定任何法定貨幣或者加密貨幣,例如。ETP將被用來衡量Metaverse上的智能資產的價值,或者作為金融交易中的一般擔保物。與此同時,當使用Metaverse系統的過程中需要收費的時候,將是以ETP的形式進行收費,這也將是ETP價值增長方式之一,例如我們通過Metaverse創建一種新的Smart Property-智能資產、注冊一個Avatar-數字身份或者申請成為一名Oracle-價值中介。
元界的定位肯定不是「數字貨幣」,所以首先就可以排除與以及其他山寨幣的比較。幣本身沒有價值,價值取決於元界解決了什麼需求。元界(Metaverse)旨在搭建一個點對點的、由數字資產驅動生活和金融應用的虛擬世界,我們希望個人以及企業用戶可以像的互聯網一樣,方便快捷地使用元界的各項區塊鏈功能,特別是進行點對點的價值的交換過程。不同於「消滅中間人」的口號,元界為價值中間人保留了區塊鏈上的位置,被稱為Oracle。就像淘寶把線下商家搬到線上來一樣,維優-元界首先要做的就是,擁抱中介,將資產數字化。淘寶並沒有消滅商家,而是把線下商家搬到線上來,同樣,元界不是去掉中介,而是把線下中介搬到線上來。

㈦ 2020哪些數字貨幣最有潛力

1、Enjin(ENJ)

在不久的將來,游戲行業是最有可能首先大規模採用區塊鏈的產業。Enjin Coin是由Enjin創建的虛擬商品的加密貨幣。 Enjin是「最大的在線游戲社區平台」,擁有超過250,000個游戲社區和1,870萬注冊游戲玩家。

2、Cardano(ADA )

Cardano相對於Ethereum、EOS、Tron,是第三代去中心化app(DApp)和智能合約平台。Cardano的設計哲學有以下幾點:

可擴展性(Scalability):隨著用戶增長,處理交易的速度不受影響甚至更快,像p2p協議正是如此。

互通性(Interoperability):未來將會有無數多設備之間相互連接,而不是像現在只能通過路由器進行連接轉發,各種設備可以通過標準的:通用協議直接進行通信。

可持續性(Sustainability):如同bitcoin,Cardano項目不會受到某個公司或組織的控制和影響,也正如此才是一個安全的去中心化的,可以進行可持續開發的平台。

3、Nash Exchange(NEX)

隨著STO(Security Token Offerings)的流行,Nash也在其中扮演重要角色。Nash是一種注冊安全的Token(Security Token),過去一段時間,Nash參與和領導了多起項目的開發。

Nash Exchange是一個去中心化的交易所,如果持有NEX token,可以在此計算可以得到的股息分紅。

4、Basic Attention Token (BAT)

BAT主要解決廣告投放的問題:

用戶信息被濫用:大公司如google、facebook跟蹤和利用用戶信息和行為,在用戶不知情的情況進行售賣。

廣告投放效果受到抑制:中間商賺取絕大多數比列的費用、投放的廣告大量被用戶利用軟體進行屏蔽以及廣告投放造假。

在過去的6個月到12個月當中,使用brave瀏覽器(註:brave瀏覽器支持BAT token)發布者迅速增長,幾乎沒有哪個區塊鏈生態有如此快。

5、chainlink(LINK)

chainlink主要解決每個區塊鏈都存在的、智能合約無法獲取外部數據的問題。為了將外部數據引入區塊鏈,智能合約提出Oracles的概念。

包括google在內的公司在支持chainlink的開發,以下是一份Chainlink合作夥伴名單。

Chainlink的一個主要問題類似於以太坊,開發團隊保留了6.5億個LINK token,而目前只有3.5億token在流通。

6、以太坊 Ethereum(ETH)

Ethereum 長期盤踞Top 100 Cryptocurrencies第二名的位置,它的生態已經如此之大,以至於我們現在已經不能稱它為山寨幣(altcoin)。說實話,個人長期不太看好Ethereum(原因會專門開帖另說),但在短期內還是會蓬勃發展的。

㈧ oracle理論學習詳解及各種簡單操作例子怎麼解決

1. 資料庫的發展過程
層次模型 -->網狀模型 -->關系模型 -->對象關系模型
2. 關於資料庫的概念
DB:資料庫(存儲信息的倉庫)
DBMS:資料庫管理系統(用於管理資料庫的工具)
RDBMS:關系型資料庫管理系統
ORDBMS:對象關系型的資料庫管理系統
3. Oracle資料庫的主要特點
1)支持多用戶、大事務量的處理
2)資料庫安全性和完整性控制
3)支持分布式數據處理
4)可移植性
4.Oracle一些常見問題?
1)如果我只有一張表,為什麼我還要創建資料庫?
SQL語言要求所有表都需放在資料庫里。這項設計當然有它好的理由。SQL能控制多為用戶同時訪問表的行為。能夠授予或撤銷對整個資料庫的訪問權。這有時比控制每張表的許可權要簡單很多
2)創建庫的命令的字母全是大寫,一定要這樣嗎?
有些系統確實要求某些關鍵字採用大寫形式。但SQL本身不區分大小寫。也就是說,命令不大寫也可以,但命令大寫是良好的SQL編程慣例。
3)給資料庫、表和列命名時有什麼主意事項嗎?
創建具有描述性的名稱通常有不錯的效果。有時候要多用幾個單詞來命名。所有名稱都不能包含空格,所以使用下劃線能夠讓你創建更具描述性的名稱。命名時最好避免首字母大寫,因為SQL不區分大小寫。極有可能會搞錯資料庫。
4)為什麼不能直接把BLOB當成所有文本值的類型?
因為這樣很浪費空間。VARCHAR或CHAR只會佔用特定空間。不會多於256字元。但BLOB需要很大的存儲空間。隨著資料庫的增長,佔用存儲空間就是冒著耗盡硬碟空間的風險。另外,有些重要的字元串運算無法操作BLOB類型的數據。只能用於VARCHAR或CHAR。
5)為什麼需要INT和DEC這類數值類型?
節省資料庫存儲空間和效率有關。為表的沒列選擇最合適的數據類型可以為表瘦身,還可以使數據操作更為快速。
5.Oracle關系資料庫基礎
1)主鍵:表中其中一列或幾列的組合,其值能唯一標識表中每一行。
表中任何列都可以作為主鍵,但要滿足如下條件:
任何兩行都不具有相同的主鍵值
每個行都必須具有一個主鍵值(主鍵列不允許為null值)
主鍵列中的值不允許修改或更新
主鍵值不能重用(如果某行從表中刪除,它的主鍵不能賦給以後的新行)
一般以id或uuid作為主鍵的名字
2)外鍵是什麼:
在一個關系(參照表)中是主鍵,而另一個關系引用這個鍵。那麼這個鍵在另一個關系中就是外鍵。
3)外建能幹什麼:
使兩個關系(表)形成關聯,外鍵只能引用參照表中的主鍵。保持數據一致性,完整性。
如圖:

4)如何在資料庫內表示一對一

5)如何在資料庫內表示一對多

6)關系模型的完整性約束是什麼?
是通過關系的某種約束條件對關系進行約束。也就是說關系的值隨時間變化時應該滿足一些約束條件。如年齡不能超過1000,性別必須是男或者女
7)關系模型的完整性約束能有什麼?
實體完整性、參照完整性、用戶自定義完整性。
實體完整性:針對基本關系而言,也就是一個二維表,主鍵不能為NULL
參照完整性:表之間存在關系,自然就存在關系的引用(外鍵),表和表之間的關系通過外鍵實現,外鍵可以為NULL或引用表的主鍵
用戶自定義完整性:針對不同的需求定義自己的完整性約束,如不允許學生編號中出現非數字字元,性別必須是男或者女
6. Oracle自學筆記
1)資料庫和表的名稱不一定要大寫。
2)列是存儲在表中的一塊數據,行是一組能夠描述某個事物的列的集合。列和行構成了表。
3)創建oracle資料庫。使用oracle自帶的Database Configuration Assistant 來創建庫
4)使用DBA身份 創建表空間。具體sql如下:
create tablespace pzw datafile 'C:/oracle/pzw.dbf' SIZE 1024M REUSE AUTOEXTEND OFF extent management local segment space
management auto;
5)刪除用戶命令
drop user pzw cascade;
6)刪除表空間命令
DROP TABLESPACE pzw INCLUDING CONTENTS AND DATAFILES;
7 )查看錶空間命令。

鏈接地址:查看oracle表空間的兩種方式
8)創建用戶。
create user pzw identified by pzw;
9)將包空間分配給用戶
alter user pzw default tablespace pzw;
10)給用戶授權
grant create session, create table, unlimited tablespace to pzw;
11)創建表
CREATE TABLE doughnut_list
(
doughnut_name VARCHAR(10),
doughnut_type VARCHAR(6),
doughnut_birthday DATE
);

12)刪除表
DROP TABLE
doughnut_list;

13)給表中增加一列
Alter table EMP add sale number;

14)資料庫插入一條數據
insert into DEPT_EMP_TABLE (DEPT_EMP_NO,emp_no,Dept_No,Joined_Date) values (009,'00002',1,to_date('2011-2-28 15:42:56','yyyy-mm-dd hh24:mi:ss'));
commit;

15)資料庫修改一條數據
update emp set emp_name='張惠妹',age=20,sex='女',profession='流行歌手' where emp_no = '00002';
commit;
16)資料庫刪除一條數據

delete emp where emp_no = '000013';
commit;

17)查詢全部數據
select * from emp;
18)創建視圖
create view adress_view as select * from pzw.adress;

以下為oracle演示數據操作及練習題(對菜鳥及有用。使用scott 登陸。默認密碼tiger)
1.查看演示數據的表。
select*fromtab
或者selecttable_namefromuser_tables;
2.查看錶結構(plsql操作無效。使用命名提示符 可以操作)
desc dept;
3.查看員工姓名
select ENAMEfrom emp;
4.查詢員工的編號和明星(sql語句不區分大小寫)
select empno, enamefrom emp;
5.查詢所有的欄位
select*fromemp;
一般建議不使用*號,使用*號不明確,建議將相關的欄位寫到select語句的後面,使用*號的效率比較低
6.列出員工的編號,姓名和年薪。
select empno, ename,sal*12from emp;

select語句中可以使用運算符,以上存在一些問題,年薪的欄位名稱不太明確

7.將查詢出來的欄位顯示為中文
select empnoas 員工編號, ename as 員工姓名, sal*12 as 年薪 from emp;
可以採用as命名別名,as可以省略
如:可以採用as命名別名,as可以省略
8.查詢薪水等於5000的員工
select empno, ename, sal from emp where sal=5000;

如果是字元類型的數據進行比較的時候,是區分大小寫的。
9.查詢薪水不等於5000的員工
select empno, ename, sal from emp where sal<>5000;
10.查詢工作崗位不等於manager的員工
select empno,ename,sal,job from emp where job<>
'manager';

在sql語句中如果是字元串採用單引號,引起來,不同於Java中採用雙引號,如果是數值型也可以引起來,只不過是數值類型數據當成字元串來處理
11.查詢薪水為1600到3000的員工(第一種方式,採用>=和<=)
select empno, ename, sal from emp where sal>=1600 and sal<=3000;
查詢薪水為1600到3000的員工(第一種方式,採用between ...and...)
select empno,ename,sal,job from emp where salbetween
1600and 3000;

between ….and …,包含最大值和最小值

between ….and …,不僅僅可以應用在數值類型的數據上,還可以應用在字元數據類型上

between ….and …,對於兩個參數的設定是有限制的,小的數在前,大的數在後
12.查詢津貼為空的員工
select * from emp where commis null;

13.查詢津貼不為空的員工
select * from emp where commis not null;
14.工作崗位為MANAGER,薪水大於2500的員工。
select empno, ename, sal from emp where job='MANAGER'and sal>2500;

and表示並且的含義,表示所有的條件必須滿足
15.查詢出job為manager和job為salesman的員工。
select * from emp where job='MANAGER'or job='SALESMAN';

or,只要滿足條件即可,相當於或者
16.查詢薪水大於1800,並且部門編號為20 或者 30的
select * from emp where sal>1800and (deptno=20or deptno=30);

17.查詢出job為manager和job為salesman的員工
select * from emp where jobin('MANAGER','SALESMAN');
18.查詢job不等於MANAGER並且不能與SALESMAN的員工(第一種寫法)
select * from emp where job<> 'MANAGER' and job <> 'SALESMAN';

19 .查詢job不等於MANAGER並且不能與SALESMAN的員工(第二種寫法)

select * from emp where jobnot in('MANAGER','SALESMAN');

20.查詢以M開頭的所有員工
select * from emp where ename like 'M %';

21.查詢以T結尾的所有員工
select * from emp where ename like '%T';

22.查詢以O結尾的所有員工
select * from emp where ename like '%O%';

23.查詢姓名中第一個字元為A的所有員工
select * from emp where ename like '_A%';

Like可以實現模糊查詢,like支持%和下劃線匹配

Like中%和下劃線的差別?
%匹配任意字元出現任意次數
下劃線只匹配一個任意字元出現一次

Like語句是可以應用在數值類型的數據上的,但是如果沒有使用引號括起來的話,那麼不能使用%和下劃線。類似於等號的操作,如果使用引號括起來的話,那麼可以使用%和下劃線,將數值類型的數據轉換為字元類型後進行處理。
24.按照薪水由小到大排序
s elect * from emporder by sal;

如果存在where子句那麼order by必須放到where語句的後面
25.手動指定按照薪水由小到大排序
select * from emp order by saldesc;

26. 按照薪水和姓名排序
select * from emp order by sal desc ,ename desc;

如果採用多個欄位排序,如果根據第一個欄位排序重復了,會根據第二個欄位排序

select * from emp order by sal asc;

26.手動指定按照薪水由大到小排序
select * from emporder by sal desc;

27.按照薪水升序(使用欄位的位置來排序)
select * from emp order by 6;

不建議使用此種方式,採用數字含義不明確,程序不健壯
28.查詢員工.將員工姓名全部轉換成小寫。
select lower(ename)from emp;

29.查詢job為manager的員工
select * from emp where job=upper('manager');

30.查詢姓名以M開頭所有的員工
select * from emp wheresubstr(ename, 1,1)='M';

方法的第二個參數表示的是查詢字元的位置,0,1都表示第一個字元,負數表示從結尾開始的位置,第三個參數表示截取字元串的長度。
31.取得員工姓名的長度
select length(ename) from emp;

32.取得工作崗位為MANAGER的所有員工
select * from emp where job=trim('MANAGER ');

trim會去首尾空格,不會去除中間的空格
33.查詢1986-02-20入職的員工(第一種方法,與資料庫的格式匹配上)
select * from emp where HIREDATE='20-2月 -81';

查詢1982-02-20入職的員工(第二種方法,將字元串轉換成date類型)
select * from emp where hiredate=to_date('1981-02-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

to_date可以將字元串轉換成日期,具體格式to_date(字元串,匹配格式)
34.查詢1981- 02-30以後入職的員工,將入職日期格式為yyyy-mm-dd hh:mm:ss
select empno, ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss')from emp where hiredate>to_date('1981-02-2000:00:00', 'YYYY-MM-DD HH24:MI:SS');

35.查詢員工薪水加入前分位
select empno, ename, to_char(sal, '$999,999') from emp;

36.查詢薪水加入千分位和保留兩位小數
select empno, ename, to_char(sal, '$999,999.00') fromemp;

將數字轉換成字元串,格式

控制符

說明

9

表示一位數字

0

位數不夠可以補零

$

美元符

L

本地貨幣符號

.

顯示小數

,

顯示千分位

37.將字元串轉換成數值
select * from emp where sal>to_number('1,500','999,999');
38.取得員工的全部薪水,薪水+津貼
select empno, ename, sal, comm, sal+nvl(comm,0) fromemp;

39.如果job為MANAGER薪水上漲10%,如果job為SALESMAN工資上漲50%(case … when … then …end)
select empno, ename, job, sal, (casejobwhen 'MANAGER' thensal*1.1when 'SALESMAN' thensal*1.5end)as newsal from emp;

40.如果job為MANAGER薪水上漲10%,如果job為SALESMAN工資上漲50%(decode)
select empno, ename, job, sal, decode(job,'MANAGER', SAL*1.1, 'SALESMAN',sal*1.5) as newsal from emp;

41.四捨五入
select round(1234567.4567, 2) from al;

Dual是oracle提供的,主要為了方便使用,因為select的時候需要用from
42.聚合函數

count

取得記錄數

sum

求和

Avg

取平均

Max

取最大的數

min

取最小的數

43.取得所有員工人數
select count(*) from emp;

Count(*)表示取得所有記錄,忽略null,為null值也會取得
44.取得津貼不為null的員工數
select count(comm) from emp;

採用count(欄位名稱),不會取得為null的紀錄
45.取得工作崗位的個數
select count(distinctjob) from emp;

Distinct可以去除重復的紀錄
46.取得薪水的合計
select sum(sal) from emp;

47取得薪水的合計(sal+comm)
select sum(sal+nvl(comm, 0)) from emp;
48.取得平均薪水
select avg(sal) from emp;

49.取得最高薪水
select max(to_char(hiredate, 'yyyy-mm-dd')) from emp;

50.取得最小薪水
select min(sal) from emp;

51.取得最早入職的員工
select min(hiredate) from emp;

52.可以將這些聚合函數都放到select中一起使用
select count(*), sum(sal), avg(sal), max(sal),min(sal) from emp;

53.取得每個崗位的工資合計,要求顯示崗位名稱和工資合計。
select job, sum(sal) from empgroupby job;

採用group by,非聚合函數所使用的欄位必須參與分組,
Group by中不能使用聚合函數
如果使用了order by,order by必須放到group by後面
54。取得每個崗位的平均工資大於2000
select job, avg(sal) from emp group by job having avg(sal) >2000;

分組函數的執行順序:
1、 根據條件查詢數據
2、 分組
3、 採用having過濾,取得正確的數據
55. 顯示每個員工信息,並顯示所屬的部門名稱
select ename ,dname from emp a ,dept b where a.deptno = b.deptno;

以上查詢也稱為「內連接」,指查詢相等的數據
56.取得員工和所屬的經理的姓名
select a.ename, b.ename from emp a, emp b wherea.mgr=b.empno;

以上稱為「自連接」,只有一張表連接,具體的查詢方法

57.(內連接)顯示薪水大於2000的員工信息,並顯示所屬的部門名稱
SQL99語法:
select ename,sal,dname from emp a join dept b on a.deptno = b.deptno where sal>2000;
SQL92語法
select ename,sal,dname from emp a, dept b where a.deptno=b.deptno and sal > 2000;

Sql92語法和sql99語法的區別:99語法可以做到表的連接和查詢條件分離,特別是多個表進行連接的時候,會比sql92更清晰
58.(外連接)顯示薪水大於2000的員工信息,並顯示所屬的部門名稱,如果某一個部門沒有員工。那麼該部門也必須顯示出來
select dname,ename from emp a right join dept b on a.deptno = b.deptno;
59.查詢員工名稱和所屬經歷的名稱,如果沒有上級經理,也要查詢出來
Select e.ename, m.ename mname from emp e, emp mwhere m.empno(+) = e.mgr;
60.查詢員工信息,查詢哪些人是管理者,要求顯示出其員工編號和員工姓名
select ename,ename from emp where empno in (select distinct mgr from emp where mgr is not null);
61.查詢那些人的薪水高於員工的平均薪水,需要顯示員工編號,員工姓名,薪水。
select empno, ename, sal from emp where sal>(selectavg(sal) from emp);

分析思路:首先根據文字描述找出被依賴的條件,逐次分析
62.查詢各個部門的平均薪水所屬的等級,需要顯示部門編號,平均薪水,等級編號

select a.deptno, a.avg_sal, b.grade from (select deptno, avg(sal) avg_sal fromemp group by deptno) a, salgrade b where a.avg_sal between b.losal and b.hisal;

關鍵點:將子查詢看作一張表
63.查詢員工信息以及部門名稱
Select e.empno, e.ename, e.deptno, (select dname from dept where deptno = e.deptno) as dname from emp e
64.union可以合並集合(相加)

select * from emp where job='MANAGER'
union
select* from emp where job='SALESMAN'
65.minus可以移出集合(相減)
查詢部門編號為10和20的,取出薪水大於2000的。

select * from emp where deptno in(10, 20)
minus
select* from emp where sal>2000
66.rownum隱含欄位
select rownum, a.* from emp a;
67.取得前5條數據
select * from emp where rownum <=5;
68.取得薪水最好的前5名

select empno, ename, sal from (select empno,ename, sal from emp order by sal desc)whererownum <=5

㈨ oracle資料庫中有哪些字元集,字元集之間的子集和超集關系是怎麼樣的

oracle資料庫的字元集有很多的,具體的也不能一一詳細地列舉出來了,但是,建庫的時候,會有選擇字元集的界面,點開下拉條,將會列出oracle所支持的所有字元集(10/12)。
超集與子集是包含和被包含的關系,超集兼容子集。

㈩ 如何查看和修改Oracle資料庫伺服器端的字元集

Oracle 字元集的查看和修改
一、什麼是Oracle字元集
Oracle字元集是一個位元組數據的解釋的符號集合,有大小之分,有相互的包容關系。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索數據。它使資料庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日歷自動適應本地化語言和平台。

影響Oracle資料庫字元集最重要的參數是NLS_LANG參數。
它的格式如下: NLS_LANG = language_territory.charset
它有三個組成部分(語言、地域和字元集),每個成分控制了NLS子集的特性。
其中:
Language: 指定伺服器消息的語言, 影響提示信息是中文還是英文
Territory: 指定伺服器的日期和數字格式,
Charset: 指定字元集。
如:AMERICAN _ AMERICA. ZHS16GBK
從NLS_LANG的組成我們可以看出,真正影響資料庫字元集的其實是第三部分。
所以兩個資料庫之間的字元集只要第三部分一樣就可以相互導入導出數據,前面影響的只是提示信息是中文還是英文。

二.字元集的相關知識:
2.1 字元集
實質就是按照一定的字元編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle資料庫最早支持的編碼方案是US7ASCII。
Oracle的字元集命名遵循以下命名規則:
<Language><bit size><encoding>
即: <語言><比特位數><編碼>
比如: ZHS16GBK表示採用GBK編碼格式、16位(兩個位元組)簡體中文字元集

2.2 字元編碼方案

2.2.1 單位元組編碼
(1)單位元組7位字元集,可以定義128個字元,最常用的字元集為US7ASCII
(2)單位元組8位字元集,可以定義256個字元,適合於歐洲大部分國家
例如:WE8ISO8859P1(西歐、8位、ISO標准8859P1編碼)

2.2.2 多位元組編碼
(1)變長多位元組編碼
某些字元用一個位元組表示,其它字元用兩個或多個字元表示,變長多位元組編碼常用於對亞洲語言的支持, 例如日語、漢語、印地語等
例如:AL32UTF8(其中AL代表ALL,指適用於所有語言)、zhs16cgb231280
(2)定長多位元組編碼
每一個字元都使用固定長度位元組的編碼方案,目前oracle唯一支持的定長多位元組編碼是AF16UTF16,也是僅用於國家字元集
2.2.3 unicode編碼
Unicode是一個涵蓋了目前全世界使用的所有已知字元的單一編碼方案,也就是說Unicode為每一個字元提供唯一的編碼。UTF-16是unicode的16位編碼方式,是一種定長多位元組編碼,用2個位元組表示一個unicode字元,AF16UTF16是UTF-16編碼字元集。
UTF-8是unicode的8位編碼方式,是一種變長多位元組編碼,這種編碼可以用1、2、3個位元組表示一個unicode字元,AL32UTF8,UTF8、UTFE是UTF-8編碼字元集

2.3 字元集超級
當一種字元集(字元集A)的編碼數值包含所有另一種字元集(字元集B)的編碼數值,並且兩種字元集相同編碼數值代表相同的字元時,則字元集A是字元集B的超級,或稱字元集B是字元集A的子集。
Oracle8i和oracle9i官方文檔資料中備有子集-超級對照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由於US7ASCII是最早的Oracle資料庫編碼格式,因此有許多字元集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

2.4 資料庫字元集(oracle伺服器端字元集)
資料庫字元集在創建資料庫時指定,在創建後通常不能更改。在創建資料庫時,可以指定字元集(CHARACTER SET)和國家字元集(NATIONAL CHARACTER SET)。

2.4.1字元集
(1)用來存儲CHAR, VARCHAR2, CLOB, LONG等類型數據
(2)用來標示諸如表名、列名以及PL/SQL變數等
(3)用來存儲SQL和PL/SQL程序單元等

2.4.2國家字元集:
(1)用以存儲NCHAR, NVARCHAR2, NCLOB等類型數據
(2)國家字元集實質上是為oracle選擇的附加字元集,主要作用是為了增強oracle的字元處理能力,因為NCHAR數據類型可以提供對亞洲使用定長多位元組編碼的支持,而資料庫字元集則不能。國家字元集在oracle9i中進行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8中選擇,默認值是AF16UTF16

2.4.3查詢字元集參數
可以查詢以下數據字典或視圖查看字元集設置情況
nls_database_parameters、props$、v$nls_parameters
查詢結果中NLS_CHARACTERSET表示字元集,NLS_NCHAR_CHARACTERSET表示國家字元集

2.4.4修改資料庫字元集
按照上文所說,資料庫字元集在創建後原則上不能更改。不過有2種方法可行。

1. 如果需要修改字元集,通常需要導出資料庫數據,重建資料庫,再導入資料庫數據的方式來轉換。
2. 通過ALTER DATABASE CHARACTER SET語句修改字元集,但創建資料庫後修改字元集是有限制的,只有新的字元集是當前字元集的超集時才能修改資料庫字元集,例如UTF8是US7ASCII的超集,修改資料庫字元集可使用ALTER DATABASE CHARACTER SET UTF8。

2.5 客戶端字元集(NLS_LANG參數)

2.5.1客戶端字元集含義
客戶端字元集定義了客戶端字元數據的編碼方式,任何發自或發往客戶端的字元數據均使用客戶端定義的字元集編碼,客戶端可以看作是能與資料庫直接連接的各種應用,例如sqlplus,exp/imp等。客戶端字元集是通過設置NLS_LANG參數來設定的。

2.5.2 NLS_LANG參數格式
NLS_LANG=<language>_<territory>.<client character set>
Language: 顯示oracle消息,校驗,日期命名
Territory:指定默認日期、數字、貨幣等格式
Client character set:指定客戶端將使用的字元集
例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII
AMERICAN是語言,AMERICA是地區,US7ASCII是客戶端字元集

2.5.3客戶端字元集設置方法
1)UNIX環境
$NLS_LANG=「simplified chinese」_china.zhs16gbk
$export NLS_LANG
編輯oracle用戶的profile文件
2)Windows環境
編輯注冊表
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME

2.5.4 NLS參數查詢
Oracle提供若干NLS參數定製資料庫和用戶機以適應本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通過查詢以下數據字典或v$視圖查看。
NLS_DATABASE_PARAMETERS:顯示資料庫當前NLS參數取值,包括資料庫字元集取值
NLS_SESSION_PARAMETERS: 顯示由NLS_LANG 設置的參數,或經過alter session 改變後的參數值(不包括由NLS_LANG 設置的客戶端字元集)
NLS_INSTANCE_PARAMETE: 顯示由參數文件init<SID>.ora 定義的參數
V$NLS_PARAMETERS:顯示資料庫當前NLS參數取值

2.5.5修改NLS參數
使用下列方法可以修改NLS參數
(1)修改實例啟動時使用的初始化參數文件
(2)修改環境變數NLS_LANG
(3)使用ALTER SESSION語句,在oracle會話中修改
(4)使用某些SQL函數
NLS作用優先順序別:Sql function > alter session > 環境變數或注冊表 > 參數文件 > 資料庫默認參數

三.EXP/IMP 與 字元集
3.1 EXP/IMP
Export 和 Import 是一對讀寫Oracle數據的工具。Export 將 Oracle 資料庫中的數據輸出到操作系統文件中, Import 把這些文件中的數據讀到Oracle 資料庫中,由於使用exp/imp進行數據遷移時,數據從源資料庫到目標資料庫的過程中有四個環節涉及到字元集,如果這四個環節的字元集不一致,將會發生字元集轉換。
EXP
____________ _________________ _____________
|imp導入文件|<-|環境變數NLS_LANG|<-|資料庫字元集|
------------ ----------------- -------------
IMP
____________ _________________ _____________
|imp導入文件|->|環境變數NLS_LANG|->|資料庫字元集|
------------ ----------------- -------------

四個字元集是
(1)源資料庫字元集
(2)Export過程中用戶會話字元集(通過NLS_LANG設定)
(3)Import過程中用戶會話字元集(通過NLS_LANG設定)
(4)目標資料庫字元集

3.2導出的轉換過程
在Export過程中,如果源資料庫字元集與Export用戶會話字元集不一致,會發生字元集轉換,並在導出文件的頭部幾個位元組中存儲Export用戶會話字元集的ID號。在這個轉換過程中可能發生數據的丟失。

例:如果源資料庫使用ZHS16GBK,而Export用戶會話字元集使用US7ASCII,由於ZHS16GBK是16位字元集,而US7ASCII是7位字元集,這個轉換過程中,中文字元在US7ASCII中不能夠找到對等的字元,所以所有中文字元都會丟失而變成「?? 」形式,這樣轉換後生成的Dmp文件已經發生了數據丟失。
因此如果想正確導出源資料庫數據,則Export過程中用戶會話字元集應等於源資料庫字元集或是源資料庫字元集的超集

3.3導入的轉換過程
(1)確定導出資料庫字元集環境
通過讀取導出文件頭,可以獲得導出文件的字元集設置
(2)確定導入session的字元集,即導入Session使用的NLS_LANG環境變數
(3)IMP讀取導出文件
讀取導出文件字元集ID,和導入進程的NLS_LANG進行比較
(4)如果導出文件字元集和導入Session字元集相同,那麼在這一步驟內就不需要轉換, 如果不同,就需要把數據轉換為導入Session使用的字元集。可以看出,導入數據到資料庫過程中發生兩次字元集轉換

第一次:導入文件字元集與導入Session使用的字元集之間的轉換,如果這個轉換過程不能正確完成,Import向目標資料庫的導入過程也就不能完成。
第二次:導入Session字元集與資料庫字元集之間的轉換。

四. 查看資料庫字元集
涉及三方面的字元集,
1. oracel server端的字元集;
2. oracle client端的字元集;
3. dmp文件的字元集。

在做數據導入的時候,需要這三個字元集都一致才能正確導入。

4.1 查詢oracle server端的字元集
有很多種方法可以查出oracle server端的字元集,比較直觀的查詢方法是以下這種:
SQL> select userenv('language') from al;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(『language』) from al;
AMERICAN _ AMERICA. ZHS16GBK

4.2 如何查詢dmp文件的字元集
用oracle的exp工具導出的dmp文件也包含了字元集信息,dmp文件的第2和第3個位元組記錄了dmp文件的字元集。如果dmp文件不大,比如只有幾M或幾十M,可以用UltraEdit打開(16進制方式),看第2第3個位元組的內容,如0354,然後用以下SQL查出它對應的字元集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from al;
ZHS16GBK

如果dmp文件很大,比如有2G以上(這也是最常見的情況),用文本編輯器打開很慢或者完全打不開,可以用以下命令(在unix主機上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然後用上述SQL也可以得到它對應的字元集。

4.3 查詢oracle client端的字元集
在windows平台下,就是注冊表裡面相應OracleHome的NLS_LANG。還可以在dos窗口裡面自己設置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
這樣就隻影響這個窗口裡面的環境變數。

在unix平台下,就是環境變數NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK

如果檢查的結果發現server端與client端字元集不一致,請統一修改為同server端相同的字元集。

補充:
(1).資料庫伺服器字元集
select * from nls_database_parameters
來源於props$,是表示資料庫的字元集。

(2).客戶端字元集環境
select * from nls_instance_parameters
其來源於v$parameter,表示客戶端的字元集的設置,可能是參數文件,環境變數或者是注冊表

(3).會話字元集環境
select * from nls_session_parameters
來源於v$nls_parameters,表示會話自己的設置,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。

(4).客戶端的字元集要求與伺服器一致,才能正確顯示資料庫的非Ascii字元。
如果多個設置存在的時候,NLS作用優先順序別:Sql function > alter session > 環境變數或注冊表 > 參數文件 > 資料庫默認參數

字元集要求一致,但是語言設置卻可以不同,語言設置建議用英文。如字元集是zhs16gbk,則nls_lang可以是American_America.zhs16gbk。

五. 修改oracle的字元集
按照上文所說,資料庫字元集在創建後原則上不能更改。因此,在設計和安裝之初考慮使用哪一種字元集十分重要。對資料庫server而言,錯誤的修改字元集將會導致很多不可測的後果,可能會嚴重影響資料庫的正常運行,所以在修改之前一定要確認兩種字元集是否存在子集和超集的關系。一般來說,除非萬不得已,我們不建議修改oracle資料庫server端的字元集。特別說明,我們最常用的兩種字元集ZHS16GBK和ZHS16CGB231280之間不存在子集和超集關系,因此理論上講這兩種字元集之間的相互轉換不受支持。

不過修改字元集有2種方法可行。
1. 通常需要導出資料庫數據,重建資料庫,再導入資料庫數據的方式來轉換。
2. 通過ALTER DATABASE CHARACTER SET語句修改字元集,但創建資料庫後修改字元集是有限制的,只有新的字元集是當前字元集的超集時才能修改資料庫字元集,例如UTF8是US7ASCII的超集,修改資料庫字元集可使用ALTER DATABASE CHARACTER SET UTF8。

5.1 修改server端字元集(不建議使用)

1. 關閉資料庫
SQL>SHUTDOWN IMMEDIATE

2. 啟動到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;

--這里可以從父集到子集
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;

--如果是從子集到父集,需要使用INTERNAL_USE 參數,跳過超子集檢測
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL32UTF8;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP
注意:如果沒有大對象,在使用過程中進行語言轉換沒有什麼影響,(切記設定的字元集必須是ORACLE支持,不然不能start) 按上面的做法就可以。

若出現『ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists』 這樣的提示信息,
要解決這個問題有兩種方法
1. 利用INTERNAL_USE 關鍵字修改區域設置,
2. 利用re-create,但是re-create有點復雜,所以請用internal_use

SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT EXCLUSIVE;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL>SHUTDOWN immediate;
SQL>startup;
如果按上面的做法做,National charset的區域設置就沒有問題

5.2 修改dmp文件字元集
上文說過,dmp文件的第2第3位元組記錄了字元集信息,因此直接修改dmp文件的第2第3位元組的內容就可以『騙』過oracle的檢查。這樣做理論上也僅是從子集到超集可以修改,但很多情況下在沒有子集和超集關系的情況下也可以修改,我們常用的一些字元集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因為改的只是dmp文件,所以影響不大。

具體的修改方法比較多,最簡單的就是直接用UltraEdit修改dmp文件的第2和第3個位元組。
比如想將dmp文件的字元集改為ZHS16GBK,可以用以下SQL查出該種字元集對應的16進制代碼: SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from al;
0354
然後將dmp文件的2、3位元組修改為0354即可。
如果dmp文件很大,用ue無法打開,就需要用程序的方法了。

5.3客戶端字元集設置方法
1)UNIX環境
$NLS_LANG=「simplified chinese」_china.zhs16gbk
$export NLS_LANG
編輯oracle用戶的profile文件
2)Windows環境
編輯注冊表
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME
或者在窗口設置:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK

熱點內容
USDT可以提了嗎 發布:2024-04-27 00:39:07 瀏覽:679
金融危機比特幣會影響 發布:2024-04-27 00:10:57 瀏覽:330
區塊鏈新玩法有哪些 發布:2024-04-27 00:09:03 瀏覽:710
幣圈30秒猜大小 發布:2024-04-26 23:57:06 瀏覽:470
區塊鏈連接工具 發布:2024-04-26 23:43:27 瀏覽:227
挖礦機理論 發布:2024-04-26 23:23:52 瀏覽:891
trx加杠桿 發布:2024-04-26 23:01:55 瀏覽:331
怎樣在電腦上挖比特幣 發布:2024-04-26 22:45:35 瀏覽:525
比特挖礦源碼 發布:2024-04-26 22:44:41 瀏覽:281
doge銷量 發布:2024-04-26 22:43:47 瀏覽:918