1. 程式人生 > >Oracle筆記 十二、PL/SQL 面向物件oop程式設計

Oracle筆記 十二、PL/SQL 面向物件oop程式設計

------------------------抽象資料型別-----------
--建立地址型別,一定要加as object,還可以在型別中加過程或方法
create or replace type address as object (
       province varchar2(10), --省份屬性
       city varchar2(10) --市屬性
) not final; --not final表示該型別可以有子型別
--定義一個子型別
--under address說明這個型別繼承至address型別
create or replace type detailAddress under
address (
       street varchar2(20) --街道屬性  第3個成員
);
--建立員工資訊表,最後一列是detailAddress型別
drop table empInfo
create table empInfo (
       eName varchar2(20) ,  --員工姓名
       eSex char(2),  --性別
       eAge int, --年齡
       eAddress detailAddress   --員工地址
);
--增加資料,只能用構造方法
insert into empInfo values('aaa'
, '男', 28, detailAddress('湖北', '襄樊', '八一路'));
insert into empInfo values('bbb', '男', 26, detailAddress('湖北', '武漢', '永清街'));
insert into empInfo values('ccc', '女', 29, detailAddress('湖北', '武漢', '光谷'));
--查詢
select * from empInfo;
select * from empInfo where eSex = '男';
select * from empInfo e where e.eAddress.city = '武漢'
; --如果查詢條件包含屬性必須用表的別名
--更新有2種方式:
--第一種方式:整體更新
update empInfo e set e.eAddress = detailAddress('湖北', '武漢', '武昌') where e.eName = 'ccc';
--第二種方式:只更新抽象型別的某一列
update empInfo e set e.eAddress.city = '武漢' where e.eName = 'ccc';
--刪除
delete from empInfo e where  e.eAddress.city = '武漢';
--為抽象資料型別的屬性建立索引
create index idxemp on empInfo(eAddress.city);
--刪除
drop table empInfo;
drop type address force; --強制刪除抽象型別
-------------------------------抽象資料型別結束----------------------
------------------物件表,表中的每一行就是一個物件-----------------------
--建立抽象資料型別person,並作為基型別
create or replace type person as object (
       pName varchar2(20),  --姓名
       pSex char(2),   --性別
       pAge int      --年齡
) not final;
--建立子型別student,繼承person
--後面不要加as object
create or replace type student under person (
       stuId int
);
--建立物件表stuInfo
create table stuInfo of student;
--為物件表建立主鍵約束
alter table stuInfo add constraint pk_stuInfo primary key(stuId);
--插入資料,當普通表插入
insert into stuInfo values('aaa', '男', 29, 1001);
--插入資料,用構造方法
insert into stuInfo values(student('bbb', '男', 26, 1002));
insert into stuInfo values(student('ccc', '女', 29, 1003));
--查詢,當普通表用
select * from stuInfo where stuId = 1002;
--更新和刪除都用普通的sql語句即可
update stuInfo set pAge = 29 where pName = 'ccc';
delete from stuInfo where stuId = 1001;
rollback;
--ref(表別名)函式用來返回物件的OID,也就是物件識別符號,物件表也有rowid
select ref(s) from stuInfo s;
select rowid, ref(s) OIDS  from stuInfo s;
--建立學生分數表,注意外來鍵
create table stuScore (
       stu ref student, --stu這一列的值必須出現在stuInfo表中,且stu這一列存的物件的OID而不是物件本身
       score int  --分數
);
--向分數表插入資料,只能用select,不能用普通的values
--錯誤的做法:insert into stuscore values(select ref(s) from stuInfo where stuId = 1001, 90)
--正確的做法:
insert into stuscore select ref(s), 90 from stuInfo s where stuId = 1001;
insert into stuscore select ref(s), 80 from stuInfo s; --插入3行資料
insert into stuscore select ref(s), 70 from stuInfo s where stuId = 1003;
--查詢
select * from stuScore;
--deref(列名)函式可以把OID還原為物件,主鍵列顯示有問題
select deref(s.stu), score from stuScore s where s.stu.stuId = 1001;
--修改,以下2個都可以
update stuScore set score=100 where stu = (select ref(s) from stuInfo s where stuId = 1001);
update stuScore s set score = 99 where s.stu.stuId = 1001;
--刪除,以下3個都可以
delete from stuScore where stu = (select ref(s) from stuInfo s where stuId = 1001);
delete from stuScore s where s.stu.stuId = 1001;
delete from stuScore where stuId = 1001;
----------------------------------物件表結束----------------------
----------------------------------物件檢視-----------------------
--物件檢視的作用:把已經存在的關係錶轉換為物件表來使用,原表沒有變
--首先要建立一個和原表一樣的型別
--然後建立檢視
create table aaa
(a int);
create type aaaa as object
(a int);
create or replace view view_stu of aaaa with object oid(a)
as
select * from aaa;
select * from view_stu;
--增刪改查都和物件表一樣
-------------------------------物件檢視結束-----------------------
--------------------------------抽象型別,包含過程和方法-------------
create or replace type ADDRESS as object (
       province varchar2(10), --省份
       city varchar2(10), --市,後面的,不能少
       member function get_pro return varchar2,  --函式,後面接,而不是;
       member function get_city return varchar2,
       member procedure set_pro(pro varchar2),   --過程
       member procedure set_city(cy varchar2)
);
create or replace type body ADDRESS--後面不能加 as object
as --後面不能加begin
   member function get_pro return varchar2
   is
   begin
       return province;
   end get_pro;
   member function get_city return varchar2
   is
   begin
       return city;
   end;
   member procedure set_pro(pro varchar2)
   is
   begin
        province := pro;
   end;
   member procedure set_city(cy varchar2)
   is
   begin
        city := cy;
   end;
end;
--測試上面的成員函式和過程
declare
       addr address;
begin
     addr := address('湖北', '武漢');
     dbms_output.put_line(addr.get_city);
end;
--drop table stuInfo;
create table stuInfo (
       stuId int primary key,
       addr address
);
declare
       addr address;
begin
     addr := address('湖北', '武漢');
     insert into stuInfo values(1, addr);
     addr.set_city('鄭州');
     addr.set_pro('河南');
     insert into stuInfo values(2, addr);
end;
select * from stuInfo;
--刪除型別
drop type address force;
--------------------------抽象型別,包含過程和方法 結束-------------
----------------------------可變陣列------------------------------
--就是一個可以儲存多個值的有最大長度的陣列,陣列的成員可以是任意型別
--建立一個可變陣列型別,長度是10,存放的資料型別是number(4)
create or replace type arrType as varray(10) of number(4);
create or replace type scoreType as object (
       subName varchar2(10),
       score int
);
--建立一個長度為10的可變陣列,存放資料型別是scorType
create or replace type arrScoreType as varray(10) of scoreType;
--建立學生資訊表
--drop table stuInfo;
create table stuInfo (
       stuId int primary key,
       score arrScoreType  --可變陣列,最多10個成員
);
--插入資料,用可變陣列的建構函式
            
           

相關推薦

Oracle筆記 PL/SQL 面向物件oop程式設計

------------------------抽象資料型別----------- --建立地址型別,一定要加as object,還可以在型別中加過程或方法 create or replace type address as object ( province

PL/SQL觸發器

-s 一些事 lar err 示例 cut erro color new 觸發器是存儲程序,它會自動執行或發射當一些事件發生。觸發器,事實上,寫入響應於以下任一事件將被執行:   數據庫操作(DML)語句(DELETE,INSERT,UPDATE或)   數據庫定義(D

資料科學和人工智慧技術筆記 邏輯迴歸

十二、邏輯迴歸 作者:Chris Albon 譯者:飛龍 協議:CC BY-NC-SA 4.0 C 超引數快速調優 有時,學習演算法的特徵使我們能夠比蠻力或隨機模型搜尋方法更快地搜尋最佳超引數。 scikit-learn 的LogisticRegre

java學習筆記維陣列與面向物件

目標: 二維陣列 面向物件程式設計 一、二維陣列 二維陣列就是一個元素為一維陣列的陣列。 格式1: 資料型別[][] 變數名 = new 資料型別[m][n]; m表示這個二維陣列有多少個一維陣列 n表示每一個數組的元素的元素個數 /*

PL/SQL面向物件

PL/SQL允許定義一個物件型別,這有助於在Oracle的資料庫中設計的面向物件。物件型別可以包裝複合型別。使用物件允許實現資料的具體結構現實世界中的物件和方法操作它。物件有屬性和方法。屬性是一個物件的屬性,並用於儲存物件的狀態;和方法被用於模擬其行為。使用CREATE[OR

(C#JavaScript)面向物件程式設計

面向物件(OOP)的理解 喜歡程式的朋友們,大家應該都聽過一句話“萬物皆物件”,感覺老牛X了。 面向物件的程式設計,它是圍繞真實世界來設計程式的。 面向物件三要素:封裝、繼承、多型。 我們可以定義一個類,用來表示小轎車,並且定義小轎車的一些屬性跟行為。然而現實中,有很多種類的車,有公交車、貨車、計程車等。難道

oracle學習筆記五) PL/SQL語法結構以及使用

PL/SQL 簡介 PL/SQL 是過程語言(Procedural Language)與結構化查詢語言(SQL)結合而成的程式語言。 PL/SQL 是對 SQL 的擴充套件。 支援多種資料型別,如大物件和集合型別,可使用條件和迴圈等控制結構。 可用於建立儲存過程、函式、觸發器和程式包,給SQL語句的執行新增

十三天總結筆記

異常、io、file一:File 1.1 File:文件和目錄(文件夾)路徑名的抽象表示形式。 1.2 File的構造方法: File(String pathname):把一個路徑名稱封裝成File對象 File(String p

Hadoop學習筆記————Hive的基本原理

中介 優化 prop 指示 使用 計劃分解 分享 ges 歷史數據 一般用戶用CLI(命令行界面)接口,元數據庫含有表結構 單用戶、多用戶、遠程服務 生成db文件,只能單客戶端使用數據庫 多用戶是最常用的使用模式 配置與多用戶一致 數據格式用戶自定義

MyBatis註解SQL

指令碼sql XML配置方式的動態SQL我就不講了,有興趣可以自己瞭解,下面是用<script>的方式把它照搬過來,用註解來實現。適用於xml配置轉換到註解配置很明顯,在java中寫xml可讀性和維護性太差,尤其當SQL很長時,這樣寫是很痛苦的。 //查詢所有,@Results欄

PL/SQL Developer12圖文安裝詳解

PL/SQL Developer12圖文安裝詳解 一、下載安裝包 二、安裝過程 選擇完整版: 三、破解配置過程 product code: 4vkjwhfeh3ufnqnmpr9brvcu

淺談面向物件----

1.面向物件與面向過程的區別 2.面向物件的基本特徵 2.1 封裝 2.2 繼承 2.3 多型

EF6學習筆記:Update操作批量數據操作

ima 調用 關系 https rod 解決辦法 onf 默認值 view 要專業系統地學習EF前往《你必須掌握的Entity Framework 6.x與Core 2.0》這本書的作者(汪鵬,Jeffcky)的博客:https://www.cnblogs.com/Crea

Oracle PL/SQL開發指南》學習筆記28——原始碼除錯——PL/SQL基礎知識(第三部分)

1. 變數賦值時(隱式)強制型別轉換 (讓我想起了將近二十年前學C語言時的場景) SQL> edit Wrote file afiedt.buf 1 DECLARE 2 lv_input INTEGER; 3 BEGIN 4 lv_inp

深入理解JVM學習筆記(JVM 垃圾回收機制---如何回收垃圾---回收策略【複製演算法】)

        上一節我們講到了標記-清除演算法因為需要進行兩次記憶體掃描導致效率不高,那麼這一節我們介紹一種複製演算法,比較好的解決了這個問題。        講複製演算法前,我們先回顧一下JVM的記憶體結構。JVM記憶體大體分為兩大塊,分別為執行緒共享區、執行緒獨佔區。

Oracle 筆記安全管理

一、建立使用者二、使用者授權三、角色機制四、配置模版及資源限制附錄     資料庫安全的作用是控制使用者是否能夠對資料庫及其中的物件執行操作。要連線到 Oracle 資料庫,就需要建立一個使用者帳戶,該使用者可以根據需要授予不同的操作許可權。一、建立使用者    CREATE

CCNA學習筆記 三層交換機配置建立SVI介面

三層交換機,先明確dot1q封裝在開啟trunk 建立一個svi介面,在接口裡面配置ip地址 show ip int br  檢視介面的ip配置 當不存在vlan的時候,會自動建立vlan 分部二:三層交換 vtp domain server vlan 30 vlan 40

面向對象三大特性:繼承封裝多態

ini 子類 span 特性 code color alex pan div 一、繼承   python中的繼承分為:單繼承、多繼承 class P1: pass class P2: pass class Son1(P1):

SQLPL/SQLDDLDMLTCL介紹

mman pre clas str div red 我們 但是 efi SQL:結構化查詢語言(Structured Query Language) PL/SQL:過程化SQL語言(Procedural Language/SQL) DDL(Data Definit

十三周作業【Linux微職位】

馬哥教育一、結合圖形描述LVS的工作原理;lvs-nat模型主要是修改目標IP地址為挑選出新的RS的IP地址。即請求進入負載均衡器時做DNAT,響應出負載均衡器時做SNAT。1.當用戶請求到達Director Server,此時請求的數據報文會先到達內核的PREROUTING鏈,此時報文的源IP是CIP,目標