oracle binary_integer pls_integer,oracle中binaryinteger与plsinteger的区别
oracle中binaryinteger與plsinteger的區(qū)別
Oracle 中 Binary_Integer 與 Pls_Integer 的區(qū)別Binary_Integer 與 Pls_Integer 都是整型類型. Binary_Integer 類型變量值計(jì)算是由 Oracle 來執(zhí)行,不會(huì)出現(xiàn)溢出,但是執(zhí)行速度較慢,因?yàn)樗怯?Oracle 模擬執(zhí)行。而 Pls_Integer 的執(zhí)行是由硬件即直接由 CPU 來運(yùn)算,因而會(huì)出現(xiàn)溢出,但其執(zhí)行速度較前者快許多。 一、概述 在 ORACLE8 中定義了:標(biāo)量(SCALAR) 、復(fù)合(COMPOSITE)、引用(REFERENCE)和 LOB 四種數(shù)據(jù)類型,下面詳細(xì)介紹它們的特性。 二、標(biāo)量(SCALAR) 合法的標(biāo)量類型與數(shù)據(jù)庫的列所使用的類型相同,此外它還有一些擴(kuò)展。它又分為七個(gè)組:數(shù)字、字符、行、日期、行標(biāo)識(shí)、布爾和可信。 數(shù)字,它有三種基本類型--NUMBER、PLS_INTEGER 和 BINARY_INTENER。NUMBER 可以描述整數(shù)或?qū)崝?shù),而 PLS_INTEGER 和 BINARY_INTENER 只能描述整數(shù)。 NUMBER,是以十進(jìn)制格式進(jìn)行存儲(chǔ)的,它便于存儲(chǔ),但是在計(jì)算上,系統(tǒng)會(huì)自動(dòng)的將它轉(zhuǎn)換成為二進(jìn)制進(jìn)行運(yùn)算的。它的定義方式是 NUMBER(P,S),P 是精度,最大 38 位,S 是刻度范圍,可在-84.127 間取值。例如:NUMBER(5,2)可以用來存儲(chǔ)表示 -999.99.999.99 間的數(shù)值。P 、 S 可以在定義是省略,例如:NUMBER(5)、NUMBER 等; BINARY_INTENER 用來描述不存儲(chǔ)在數(shù)據(jù)庫中,但是需要用來計(jì)算的帶符號(hào)的整數(shù)值。它以 2 的補(bǔ)碼二進(jìn)制形式表述。循環(huán)計(jì)數(shù)器經(jīng)常使用這種類型。 PLS_INTEGER 和 BINARY_INTENER 唯一區(qū)別是在計(jì)算當(dāng)中發(fā)生溢出時(shí),BINARY_INTENER型的變量會(huì)被自動(dòng)指派給一個(gè) NUMBER 型而不會(huì)出錯(cuò),PLS_INTEGER 型的變量將會(huì)發(fā)生錯(cuò)誤。 字符,包括 CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR 和 NVARCHAR2 幾種類型。 CHAR,描述定長的字符串,如果實(shí)際值不夠定義的長度,系統(tǒng)將以空格填充。它的聲明方式如下 CHAR(L),L 為字符串長度,缺省為 1,作為變量最大 32767 個(gè)字符,作為數(shù)據(jù)存儲(chǔ)在 ORACLE8 中最大為 2000。 VARCHAR2(VARCHAR),描述變長字符串。它的聲明方式如下 VARCHAR2(L),L 為字符串長度,沒有缺省值,作為變量最大 32767 個(gè)字節(jié),作為數(shù)據(jù)存儲(chǔ)在 ORACLE8 中最大為4000。在多字節(jié)語言環(huán)境中,實(shí)際存儲(chǔ)的字符個(gè)數(shù)可能小于 L 值,例如:當(dāng)語言環(huán)境為中文 (SIMPLIFIED CHINESE_CHINA.ZHS16GBK)時(shí),一個(gè) VARCHAR2(200)的數(shù)據(jù)列可以保存 200個(gè)英文字符或者 100 個(gè)漢字字符。 LONG ,在數(shù)據(jù)庫存儲(chǔ)中可以用來保存高達(dá) 2G 的數(shù)據(jù),作為變量,可以表示一個(gè)最大長度為 32760 字節(jié)的可變字符串。 NCHAR、NVARCHAR2,國家字符集,與環(huán)境變量 NLS 指定的語言集密切相關(guān),使用方法和 CHAR、VARCHAR2 相同。 行,包括 RAW 和 LONG RAW 兩種類型。用來存儲(chǔ)二進(jìn)制數(shù)據(jù),不會(huì)在字符集間轉(zhuǎn)換。RAW,類似于 CHAR,聲明方式 RAW(L),L 為長度,以字節(jié)為單位,作為數(shù)據(jù)庫列最大2000,作為變量最大 32767 字節(jié)。 LONG RAW,類似于 LONG,作為數(shù)據(jù)庫列最大存儲(chǔ) 2G 字節(jié)的數(shù)據(jù),作為變量最大32760 字節(jié)。 日期,只有一種類型--DATE ,用來存儲(chǔ)時(shí)間信息,站用 7 個(gè)字節(jié)(從世紀(jì)到秒) ,絕對(duì)沒有“千年蟲”問題。 行標(biāo)識(shí),只有一種類型--ROWID ,用來存儲(chǔ)“行標(biāo)識(shí)符” ,可以利用 ROWIDTOCHAR 函數(shù)來將行標(biāo)識(shí)轉(zhuǎn)換成為字符。 布爾,只有一種類型--BOOLEAN,僅僅可以表示 TRUE、FALSE 或者 NULL。 可信,只有一種類型--MLSLABEL,可以在 TRUSTED ORACLE 中用來保存可變長度的二進(jìn)制標(biāo)簽。在標(biāo)準(zhǔn) ORACLE 中,只能存儲(chǔ) NULL 值。 三、復(fù)合(COMPOSITE) 標(biāo)量類型是經(jīng)過預(yù)定義的,利用這些類型可以衍生出一些復(fù)合類型。主要有記錄、表。記錄,可以看作是一組標(biāo)量的組合結(jié)構(gòu),它的聲明方式如下: TYPE record_type_name IS RECORD ( filed1 type1 [NOT NULL] [:=expr1] . filedn typen [NOT NULL] [:=exprn] ) 其中,record_type_name 是記錄類型的名字。( 是不是看著象 CREATE TABLE?)引用時(shí)必須定義相關(guān)的變量,記錄只是 TYPE,不是 VARIABLE。 表,不是物理存儲(chǔ)數(shù)據(jù)的表,在這里是一種變量類型,也稱為 PL/SQL 表,它類似于 C語言中的數(shù)組,在處理方式上也相似。它的聲明方式如下: TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER; 其中,table_type_name 是類型的名字,scalar_type 是一種標(biāo)量類型的類型聲明。引用時(shí)也必須定義相關(guān)的變量。表和數(shù)組不同,表有兩列,KEY 和 VALUE,KEY 就是定義時(shí)聲明的 BINARY_INTENER,VALUE 就是定義時(shí)聲明的 scalar_type。 除了記錄和表之外,還有對(duì)象類型、集合(嵌套表和 VARRAYS)等類型,這些將專門講解。 四、引用(REFERENCE) 在 PL/SQL8.0 之前,只有一種類型--REF CURSOR,也就是游標(biāo)。它的定義較為簡(jiǎn)單, CURSOR cursor_name IS select .from.; 在 PL/SQL8.0 之后,引入了 REF 類型,它指向一個(gè)對(duì)象。這種類型將單獨(dú)講解。 (等我弄明白再說,免得在高人面前) 五、LOB 型 LOB 變量主要是用來存儲(chǔ)大量數(shù)據(jù)的數(shù)據(jù)庫字段,最大可以存儲(chǔ) 4G 字節(jié)的內(nèi)容( 這么大,存 VCD?,浪費(fèi)!) 。主要有: CLOB :和 ORACLE7 中的 LONG 類型相似,存儲(chǔ)單字節(jié)字符數(shù)據(jù)。(別用來存中文喔。。 。) NCLOB :用來存儲(chǔ)定寬多字節(jié)字符數(shù)據(jù)。(例如:存《嘯傲江湖》就挺好) BLOB:和 LONG RAW 相似,用來存儲(chǔ)無結(jié)構(gòu)的二進(jìn)制數(shù)據(jù)。 BFILE:它用來允許 ORACLE 對(duì)數(shù)據(jù)庫外存儲(chǔ)的大型二進(jìn)制文本進(jìn)行只讀形式的訪問。 六、其他 其實(shí)在完成對(duì)標(biāo)量變量的理解之后,基本上可以應(yīng)付 C/S 模式下的常規(guī)數(shù)據(jù)庫應(yīng)用所需了,后續(xù)的類型說實(shí)話,我玩了 5 年 ORACLE,都很少用到。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的oracle binary_integer pls_integer,oracle中binaryinteger与plsinteger的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab pretty什么用,mat
- 下一篇: mysql 检查记录存在_Mysql 插