欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle?function函數(shù)返回結(jié)果集的3種方法

 更新時間:2023年07月07日 09:02:11   作者:Raphael-laq  
工作中常需要經(jīng)過一段復(fù)雜邏輯處理后,得出的一個結(jié)果集,所以這篇文章主要給大家介紹了關(guān)于Oracle?function函數(shù)返回結(jié)果集的3種方法,需要的朋友可以參考下

一、簡介

在使用Oracle數(shù)據(jù)過程中,函數(shù)是非常好用的,我們經(jīng)常定義一個函數(shù)用來處理相同的相似的問題的結(jié)果。

通常我們使用函數(shù)返回的都是單獨的值,可能是NUMBER,也可能是VARCHAR類型,其實使用函數(shù)也可以返回類似于表結(jié)構(gòu)數(shù)據(jù)的形式的數(shù)據(jù)集。

最常用的是游標的方式,其次是Table的形式,最后又產(chǎn)生了管道的方式。管道的方式與前兩者不同的地方有它可以不用返回值,即RETURN后不用接內(nèi)容,它是一行一行的返回數(shù)據(jù)。Table和管道的方式在調(diào)用時都是通過'TABLE()'關(guān)鍵字將函數(shù)的返回內(nèi)容仿真成一個數(shù)據(jù)集。

二、舉例三種返回結(jié)果集的方法

1、以游標形式返回結(jié)果集

(1)創(chuàng)建函數(shù)

CREATE OR REPLACE FUNCTION FN_R_REFCUR(P_VALUE IN VARCHAR2)
RETURN SYS_REFCURSOR IS
	C_EMPNO SYS_REFCURSOR;
BEGIN
		OPEN C_EMPNO FOR
			SELECT NAME,ADDR FROM EMP WHERE ADDR=P_VALUE;
	RETURN(C_EMPNO);
END;
/

(2)調(diào)用函數(shù)

SELECT FN_R_REFCUR('Raphael') FROM DUAL;

2、以Table形式返回結(jié)果集

(1)創(chuàng)建函數(shù)

--定義一個行類型

CREATE OR REPLACE TYPE TYPE_TTEMP_ROW AS OBJECT(NAME VARCHAR2(10), ADDR VARCHAR2(20));

--定義一個表類型

CREATE OR REPLACE TYPE TYPE_TEMP_TABLE AS TABLE OF TYPE_TTEMP_ROW;

--創(chuàng)建函數(shù)

CREATE OR REPLACE FUNCTION FN_R_TAB (P_VALUE IN VARCHAR2)
RETURN TYPE_TEMP_TABLE IS
	TEMP_ROW TYPE_TTEMP_ROW; -- 定義單行
	TEMP_TABLE TYPE_TEMP_TABLE := TYPE_TEMP_TABLE(); -- 定義返回結(jié)果,并初始化
BEGIN
	FOR CURROW IN (SELECT NAME, ADDR FROM EMP WHERE NAME=P_VALUE) -- 查詢名字是參數(shù)的值的結(jié)果
	LOOP
		TEMP_ROW := TYPE_TTEMP_ROW(CURROW.NAME, CURROW.ADDR); -- 獲得一行
		TEMP_TABLE.EXTEND; -- 表類型增加一行(EXTEND就是擴展的意思,相當于增加一行數(shù)據(jù)空間)
		TEMP_TABLE(EMP_TABLE.COUNT) := TEMP_ROW; -- 一行放進去
	END LOOP;
	RETURN(TEMP_TABLE);
END;
/

(2)調(diào)用函數(shù)

SELECT * FROM TABLE(FN_R_TAB('Raphael'));

3、以管道形式返回結(jié)果集

(1)創(chuàng)建函數(shù)

--定義一個行類型

CREATE OR REPLACE TYPE TYPE_TTEMP_ROW AS OBJECT(NAME VARCHAR2(10), ADDR VARCHAR2(20));

--定義一個表類型

CREATE OR REPLACE TYPE TYPE_TEMP_TABLE AS TABLE OF TYPE_TTEMP_ROW;

--創(chuàng)建函數(shù)

CREATE OR REPLACE FUNCTION FN_R_PIP(P_VALUE IN VARCHAR2)
RETURN TYPE_TEMP_TABLE PIPELINEDIS
	TEMP_ROW TYPE_TTEMP_ROW; --定義一個行對象類型變量
BEGIN
	FOR CURROW IN (SELECT NAME, ADDR FROM EMP WHERE NAME=P_VALUE) -- 查詢名字是參數(shù)值的結(jié)果
	LOOP
		TEMP_ROW := TYPE_TTEMP_ROW(CURROW.NAME, CURROW.ADDR); -- 獲得一行
		PIPE ROW (TEMP_ROW); -- 返回一行
	END LOOP;
	RETURN; -- 這里返回沒有值
END;
/

(2)調(diào)用函數(shù)

SELECT * FROM TABLE(FN_R_PIP('Raphael'));

官網(wǎng)地址:Oracle | Cloud Applications and Cloud Platform

總結(jié)

到此這篇關(guān)于Oracle function函數(shù)返回結(jié)果集的3種方法的文章就介紹到這了,更多相關(guān)Oracle function函數(shù)返回結(jié)果集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle數(shù)據(jù)庫升級或數(shù)據(jù)遷移方法研究

    Oracle數(shù)據(jù)庫升級或數(shù)據(jù)遷移方法研究

    本文詳細論述了oracle數(shù)據(jù)庫升級的升級前的準備、升級過程和升級后的測試與調(diào)整工作,并對各種升級方法在多種操作系統(tǒng)平臺上作了測試。
    2016-07-07
  • oracle表的簡單操作步驟

    oracle表的簡單操作步驟

    這篇文章主要介紹了oracle表的簡單操作步驟,需要的朋友可以參考下
    2017-06-06
  • oracle執(zhí)行cmd的實現(xiàn)方法

    oracle執(zhí)行cmd的實現(xiàn)方法

    裝了一個oracle db11g,于是想試一下網(wǎng)上流傳的在sqlplus中執(zhí)行cmd的一些命令,也不知怎么的,沒一個好用的,可能是網(wǎng)上轉(zhuǎn)來轉(zhuǎn)去的轉(zhuǎn)錯了.
    2009-04-04
  • Oracle庫恢復(fù)刪除數(shù)據(jù)的方法小結(jié)

    Oracle庫恢復(fù)刪除數(shù)據(jù)的方法小結(jié)

    誤刪?Oracle?庫中的數(shù)據(jù),在不考慮全庫備份和利用歸檔日志情況,如何恢復(fù)數(shù)據(jù)呢,這篇文章將給大家介紹幾種方法恢復(fù)數(shù)據(jù),文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Oracle 游標使用總結(jié)

    Oracle 游標使用總結(jié)

    游標(CURSOR)也叫光標,在關(guān)系數(shù)據(jù)庫中經(jīng)常使用,在PL/SQL程序中可以用CURSOR與SELECT一起對表或者視圖中的數(shù)據(jù)進行查詢并逐行讀取。
    2009-10-10
  • Oracle 子程序參數(shù)模式,IN,OUT,NOCOPY

    Oracle 子程序參數(shù)模式,IN,OUT,NOCOPY

    Oracle 子程序參數(shù)模式主要有IN,OUT,NOCOPY,IN和OUT可以組合,OUT和NOCOPY也可以組合使用.
    2009-10-10
  • Oracle LogMiner的使用實例代碼

    Oracle LogMiner的使用實例代碼

    這篇文章主要給大家分享了關(guān)于Oracle LogMiner的使用實例代碼,文中通過示例代碼介紹了關(guān)于查詢當前日志組、業(yè)務(wù)用戶插入操作、歸檔日志切換、業(yè)務(wù)用戶插入操作以及歸檔日志切換等等的相關(guān)功能,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • oracle自動清理archivelog文件的具體方法

    oracle自動清理archivelog文件的具體方法

    這篇文章介紹了oracle自動清理archivelog文件的具體方法,有需要的朋友可以參考一下
    2013-09-09
  • zabbix監(jiān)控oracle表空間的操作方法

    zabbix監(jiān)控oracle表空間的操作方法

    Zabbix是一款開源的網(wǎng)絡(luò)監(jiān)控和管理系統(tǒng),可以用于監(jiān)控各種網(wǎng)絡(luò)設(shè)備、服務(wù)器和應(yīng)用程序等,本文給大家介紹了zabbix監(jiān)控oracle表空間的操作方法,并通過代碼示例和圖文講解的非常詳細,需要的朋友可以參考下
    2024-04-04
  • IntelliJ DataGrip Oracle 11g遠程連接的方法步驟

    IntelliJ DataGrip Oracle 11g遠程連接的方法步驟

    本文主要介紹了IntelliJ DataGrip Oracle 11g遠程連接的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論