成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

oracle如何新建游標(biāo),oracle游標(biāo)的創(chuàng)建和使用

oracle游標(biāo)的使用

你嘗試一下, 使用 函數(shù) 來處理, 應(yīng)該就可以避免掉 存儲過程參數(shù)沒法寫的問題。

成都創(chuàng)新互聯(lián)服務(wù)項目包括克井網(wǎng)站建設(shè)、克井網(wǎng)站制作、克井網(wǎng)頁制作以及克井網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,克井網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到克井省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

創(chuàng)建返回結(jié)果集的函數(shù)

SQL create or replace package pkg_HelloWorld as

2 -- 定義ref cursor類型

3 type myrctype is ref cursor;

4 --函數(shù)申明

5 function getHelloWorld return myrctype;

6 end pkg_HelloWorld;

7 /

程序包已創(chuàng)建。

SQL CREATE OR REPLACE package body pkg_HelloWorld as

2 function getHelloWorld return myrctype

3 IS

4 return_cursor myrctype;

5 BEGIN

6 OPEN return_cursor FOR

7 SELECT 'Hello 1' AS a, 'World 1' AS B FROM dual

8 UNION ALL

9 SELECT 'Hello 2' AS a, 'World 2' AS B FROM dual;

10 return return_cursor;

11 END getHelloWorld;

12 end pkg_HelloWorld;

13 /

程序包體已創(chuàng)建。

注:Oracle 這里的函數(shù),是一個返回游標(biāo)類型的函數(shù), 不是像 SQL Server 的那種叫 “表值函數(shù)” 的東西。

因此下面的寫法會報錯。

SQL SELECT * FROM pkg_HelloWorld.getHelloWorld();

SELECT * FROM pkg_HelloWorld.getHelloWorld()

*

第 1 行出現(xiàn)錯誤:

ORA-00933: SQL 命令未正確結(jié)束

SQL SELECT pkg_HelloWorld.getHelloWorld() FROM dual;

PKG_HELLOWORLD.GETHE

--------------------

CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

A B

------- -------

Hello 1 World 1

Hello 2 World 2

C# 如何調(diào)用上面的 返回結(jié)果集的例子:

/// summary

/// 測試 調(diào)用 Oracle 返回結(jié)果集的函數(shù).

/// /summary

private void CallFuncWithTable(OracleConnection conn)

{

// 創(chuàng)建一個 Command.

OracleCommand testCommand = conn.CreateCommand();

// 定義需要執(zhí)行的SQL語句. testCommand.CommandText = "pkg_HelloWorld.getHelloWorld";

// 定義好,本次執(zhí)行的類型,是存儲過程. testCommand.CommandType = CommandType.StoredProcedure;

// 定義好,我這個參數(shù),是 游標(biāo) + 返回值.

OracleParameter para = new OracleParameter("c", OracleType.Cursor);

para.Direction = ParameterDirection.ReturnValue;

testCommand.Parameters.Add(para);

// 執(zhí)行SQL命令,結(jié)果存儲到Reader中.

OracleDataReader testReader = testCommand.ExecuteReader();

// 處理檢索出來的每一條數(shù)據(jù).

while (testReader.Read())

{

// 將檢索出來的數(shù)據(jù),輸出到屏幕上.

Console.WriteLine("調(diào)用函數(shù):{0}; 返回:{1} - {2}",

testCommand.CommandText, testReader[0], testReader[1]

);

}

// 關(guān)閉Reader.

testReader.Close();

}

Oracle下如何用sql創(chuàng)建游標(biāo)

For 循環(huán)游標(biāo)

(1)定義游標(biāo)

(2)定義游標(biāo)變量

(3)使用for循環(huán)來使用這個游標(biāo)

declare

--類型定義

cursor?c_job

is

select?empno,ename,job,sal

from?emp

where?job='MANAGER';

--定義一個游標(biāo)變量v_cinfo?c_emp%ROWTYPE?,該類型為游標(biāo)c_emp中的一行數(shù)據(jù)類型

c_row?c_job%rowtype;

begin

for?c_row?in?c_job?loop

dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);

end?loop;

end;

Fetch游標(biāo)

使用的時候必須要明確的打開和關(guān)閉

declare?

--類型定義

cursor?c_job

is

select?empno,ename,job,sal

from?emp

where?job='MANAGER';

--定義一個游標(biāo)變量

c_row?c_job%rowtype;

begin

open?c_job;

loop

--提取一行數(shù)據(jù)到c_row

fetch?c_job?into?c_row;

--判讀是否提取到值,沒取到值就退出

--取到值c_job%notfound?是false?

--取不到值c_job%notfound?是true

exit?when?c_job%notfound;

dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);

end?loop;

--關(guān)閉游標(biāo)

close?c_job;

end;

oracle中如何定義一個游標(biāo)?

1.游標(biāo)定義:

cursor XXXA is

SELECT 語句;

XXXB cursorName%rowtype;

XXXA: 游標(biāo)名

XXXB: 游標(biāo)行數(shù)據(jù)定義

2. 打開游標(biāo):

-- 打開之前最好先關(guān)一下,防止上次發(fā)生異常沒有關(guān)掉而引發(fā)不必要的異常

IF XXXA%ISOPEN THEN

CLOSE XXXA;

END IF;

Open XXXA ;

Loop

Fetch XXXA into XXXB;

exit when XXXA%NOTFOUND;

... ... 處理邏輯

end loop;

close XXXA;

如何使用Oracle的游標(biāo)?

Oracle中的游標(biāo)分為顯示游標(biāo)和隱式游標(biāo)。

顯示游標(biāo):

顯示游標(biāo)是用cursor...is命令定義的游標(biāo),它可以對查詢語句(select)返回的多條記錄進行處理;顯示游標(biāo)的操作:打開游標(biāo)、操作游標(biāo)、關(guān)閉游標(biāo);

隱式游標(biāo):

隱式游標(biāo)是在執(zhí)行插入(insert)、刪除(delete)、修改(update)和返回單條記錄的查詢(select)語句時由PL/SQL自動定義的。PL/SQL隱式地打開SQL游標(biāo),并在它內(nèi)部處理SQL語句,然后關(guān)閉它。

oracle游標(biāo)怎么使用?創(chuàng)建完了 怎么用?

在定義參數(shù)游標(biāo)之后,當(dāng)使用不同參數(shù)值多次打開游標(biāo)時,可以產(chǎn)生不同的結(jié)果集,語法如下:

cursor

cursor_name(parameter_name

datatype)

is

select_statement;

定義參數(shù)游標(biāo)時,游標(biāo)參數(shù)只能指定數(shù)據(jù)類型,而不能指定長度。

示例如下:

declare

cursor

temp_cursor(no

number)

is

select

name

from

cip_temps

where

id=no;

v_name

cip_temps.name%type;

begin

open

temp_cursor(1);

loop

分享標(biāo)題:oracle如何新建游標(biāo),oracle游標(biāo)的創(chuàng)建和使用
標(biāo)題鏈接:http://jinyejixie.com/article2/hseeoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站網(wǎng)站維護、網(wǎng)站收錄、網(wǎng)站設(shè)計、服務(wù)器托管微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)