Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据
Oracle PL/SQL 程序設計讀書筆記 - 第7章 使用數據
Oracle PL/SQL 程序設計讀書筆記 - 第7章 使用數據
7.1 程序數據的命名
PL/SQL要求在給數據結構命名的時候應該遵守下面的規則
- 名字的長度最長可以30個字符
- 名字必須以字母開始。
- 在第一個字母之后,可以使用字符包括,字母,數字,$,#,_
- 所有的名字是不區分大小寫的(除非名字被放在雙引號里)。
- 這些命名規則也有一些例外。如果在聲明時把名字放在雙引號中,你實際上可以跳過了除了最30字符限制之外的所有規則。
7.2 PL/SQL數據類型概述
所有這些預先定義好的數據類型都是在PL/SQL的STANDARD包中定義的。
7.2.2 數字
Oracle數據庫10g之前,NUMBER是唯一一個能夠和數據庫的數據類型直接對應的PL/SQL的數值型數據類型。
Oracle數據庫10g引入了兩種二進制浮點類型:BINARYFLOAT和BINARYDOUBLE。都可以同時在數據庫和PL/SQL中使用。不同的是它們有二進制的精度,因此會有四舍五入。這兩種類型支持NaN和正無窮和負無窮,只要底層平臺允許,這些二進制類型的自述完全可以通過硬件完成,因此應用程序的性能也會得到極大的提升。
Oracle11g又增加了兩種浮點數變體,SIMPLEFLOAT和SIMPLEDOUBLE,不過它們不允許NULL值,而且發生溢出時也不會拋出異常。
7.2.3 日期,時間戳和時間間隔
- 9i以前,只有DATA這一種數據類型,精確到秒。
- 9i之后,引入了兩種新的數據類型,INTERVAL和TIMESTAMP。
7.2.4 布爾類型
取值范圍:TRUE,FALSE和NULL
7.2.5 二進制數據類型
- BILE數據類型代表著保存在數據庫之外的操作系統文件中的非結構化二進制數據。
- RAW像VARCHAR2字符類型一樣,是一個變長的數據類型。只是Oracle工具在處理RAW數據時不會做字符集轉換操作。
- LONG RAW最好移植到BLOB,因為LONG RAW列可以存2G數據,但PL/SQL只能處理前32760個字節。
7.2.6 ROWIDs
- ROWID代表了表中一行記錄的唯一物理地址
- UROWID代表了一個索引組織表中一條記錄的邏輯地址。
7.2.7 REF CURSORs
- 強REF CURSOR游標變量和一個特定的記錄結構(使用%ROWTYPE)關聯在一起。
- 弱REF CURSOR游標變量沒有關聯到任何特殊結構。
7.2.8 Internet數據類型
7.2.9 "Any"數據類型
7.3 程序數據的聲明
7.3.1 聲明一個變量
語法
name datatype [NOT NULL][:=| DEFAULT default_assignment];變量聲明中可以包含一個NOT NULL子句,有了這個子句后,如果沒有為變量賦值,數據庫就會拋出一個異常。
7.3.2 聲明一個常量
聲明一個變量和聲明一個常量僅有兩個區別:對于常量而言,你需要加上CONSTANT關鍵字。常量的值是在聲明時設置的,并且一直不會改變。
name CONSTANT datatype [NOT NULL]:=| DEFAULT default_assignment;7.3.4 錨定聲明
所謂一個“錨定”的數據類型,就是告訴PL/SQL按照已經定義好的數據結構來設置變量的數據類型。
- 標量錨定:這種方法利用的是%TYPE屬性,用這種方法定義的變量可以根據某個表中的一列或者其他的PL/SQL標量變量來定義變量類型。(一個)
-
記錄錨定:這種方法利用的是%ROWTYPE屬性,用這種個表的結構或者某個預定義的顯示PL/SQL游標結構對變量的記錄結構進行定義。(一組,有點像結構體的感覺)
variable name type attribute%TYPE [optional default value assignment]; variable name tablename | cursorname%ROWTYPE [optional default value assignment];
注意:對于錯的引用的解釋是在代碼編譯時刻進行的;錨本身不會有運行時刻的額外開銷。
7.3.6 使用錨定聲明的好處
- 和數據庫列的同步
- 局部變量的標準化
7.3.7 NOT NULL數據類型的錨
當你聲明變量時,你可以要求這個變量是NOT NULL的。如果其他變量是用這個變量的%TYPE屬性聲明的,那這個約束也會傳遞給這個新的變量。不過,如果%TYPE引用的源是一個NOT NULL的數據庫列,情況就不是這樣了。一個數據庫表的NOT NULL約束不會自動地傳遞給變量。
7.4 程序員定義的子類型
- 有約束的子類型:這種子類型對原數據類型的取值做了限制或者約束。
- 沒有約束的子類型:這種子類型并沒有限制原始數據類型的取值范圍。
要想使用一個子類型變量,你首先必須在匿名PL/SQL塊,過程,函數或者包的聲明單元聲音這個子類型。
SUBTYPE subtype_name IS base_type;7.5 數據類型的轉換
- 隱式類型轉換
- 顯式類型轉換
7.5.2 顯式類型轉換
- CHARTOROWID函數:把一個CHAR或者VARCHAR2類型的字符串轉換成一個ROWID類型的值。
- CAST函數:它把一個內置的數據類型或者集合類型的數據轉換成另外一個內置數據類型或者集合類型數據。
- CONVERT函數:把字符串從一個字符集轉換成另一個字符集。
轉載于:https://www.cnblogs.com/tjpanda88/archive/2011/11/16/2250502.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老筒子楼重新装修有哪些省钱攻略?
- 下一篇: 我买的新车要加什么油呢,有什么好的建议呢