欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle返回表怎么寫(xiě),oracle 函數(shù)返回值 列表

ORACLE 存儲(chǔ)過(guò)程怎么返回臨時(shí)表結(jié)果集

我剛做的,參考下:

成都創(chuàng)新互聯(lián)成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)公司成都網(wǎng)站制作公司成都網(wǎng)站設(shè)計(jì)公司、網(wǎng)站定制、成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)微信小程序開(kāi)發(fā)、微信公眾號(hào)開(kāi)發(fā)、成都網(wǎng)站營(yíng)銷(xiāo)服務(wù),提供專(zhuān)業(yè)營(yíng)銷(xiāo)思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為橡塑保溫企業(yè)提供源源不斷的流量和訂單咨詢(xún)。

SQL CREATE GLOBAL TEMPORARY TABLE REPROTTEST(

2 ID NUMBER,

3 ANAME VARCHAR2(20)

4 ) ON COMMIT DELETE ROWS;(也可以用PRESERVER ROWS,看實(shí)際需求)

Table created

SQL create or replace procedure report_month_responsibility(

2 o_cur out sys_refcursor)

3 as

4 begin

5 insert into reprottest(id,aname) values(1,'1');

6 open o_cur for select * from reprottest;

7 end report_month_responsibility;

8 /

Procedure created

SQL set serverout on

SQL declare

2 v_id number;

3 v_aname varchar2(20);

4 o_cur sys_refcursor;

5 begin

6 report_month_responsibility(o_cur);

7 fetch o_cur into v_id,v_aname;

8 while o_cur%found loop

9 dbms_output.put_line('輸出結(jié)果:'||v_id||','||v_aname);

10 fetch o_cur into v_id,v_aname;

11 end loop;

12 commit;

13 end;

14 /

輸出結(jié)果:1,1

PL/SQL procedure successfully completed

你的那個(gè)ORA-01031: insufficient privileges,是權(quán)限不足的問(wèn)題。

SQL代碼:

CREATE GLOBAL TEMPORARY TABLE REPROTTEST(

ID NUMBER,

ANAME VARCHAR2(20)

) ON COMMIT DELETE ROWS;

create or replace procedure report_month_responsibility(

o_cur out sys_refcursor)

as

begin

insert into reprottest(id,aname) values(1,'1');

open o_cur for select * from reprottest;

end report_month_responsibility;

declare

v_id number;

v_aname varchar2(20);

o_cur sys_refcursor;

begin

report_month_responsibility(o_cur);

fetch o_cur into v_id,v_aname;

while o_cur%found loop

dbms_output.put_line('輸出結(jié)果:'||v_id||','||v_aname);

fetch o_cur into v_id,v_aname;

end loop;

commit;

end;

/

oracle的函數(shù)返回一個(gè)表怎么寫(xiě)

Oracle?需要通過(guò)?返回一個(gè)游標(biāo)來(lái)處理。

--?測(cè)試表數(shù)據(jù)。

select?*?from?test_main;

ID?VALUE

----------?--------------------

1?ONE

3?THREE

2?TWO

--?返回結(jié)果集的函數(shù).

CREATE?OR?REPLACE?FUNCTION?Get_Test_Main_All

RETURN?SYS_REFCURSOR

IS

return_cursor?SYS_REFCURSOR;

BEGIN

OPEN?return_cursor?FOR?'SELECT?*?FROM?test_main';

RETURN?return_cursor;

END;

/

--?普通的查詢(xún),來(lái)查看結(jié)果.

SELECT?Get_Test_Main_All()?FROM?dual;

GET_TEST_MAIN_ALL()

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

CURSOR?STATEMENT?:?1

CURSOR?STATEMENT?:?1

ID?VALUE

----------?--------------------

1?ONE

3?THREE

2?TWO

--?存儲(chǔ)過(guò)程調(diào)用,?來(lái)獲取結(jié)果.

DECLARE?

--?調(diào)用函數(shù)的返回值.

testCursor?SYS_REFCURSOR;

--?存儲(chǔ)單行數(shù)據(jù).

testRec??test_main%ROWTYPE;

BEGIN

--?調(diào)用返回結(jié)果集的函數(shù).

testCursor?:=?Get_Test_Main_All();

--?循環(huán),遍歷結(jié)果.

LOOP

--?游標(biāo)向前.

FETCH?testCursor?INTO?testRec;

--?無(wú)數(shù)據(jù)的情況下,退出循環(huán).

EXIT?WHEN?testCursor%NOTFOUND;

--?輸出調(diào)試信息.

dbms_output.put_line(?TO_CHAR(testRec.id)?||?'?'?||?testRec.value);

END?LOOP;

END;

/

1?ONE

3?THREE

2?TWO

PL/SQL?過(guò)程已成功完成。

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

上面的是使用動(dòng)態(tài)SQL處理的。

下面是正常SQL處理的。

CREATE?OR?REPLACE?FUNCTION?Get_Test_Main?

RETURN?SYS_REFCURSOR

IS

return_cursor?SYS_REFCURSOR;

BEGIN

OPEN?return_cursor?FOR?SELECT?*?FROM?test_main;

RETURN?return_cursor;

END;

/

SQL?SELECT?Get_Test_Main()?FROM?dual;

GET_TEST_MAIN()

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

CURSOR?STATEMENT?:?1

CURSOR?STATEMENT?:?1

ID?VALUE

----------?--------------------

2?TWO

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

上面的是沒(méi)有參數(shù)的

下面是有參數(shù)的

CREATE?OR?REPLACE?FUNCTION?Get_Test_Main?(

p_id??INT

)

RETURN?SYS_REFCURSOR

IS

return_cursor?SYS_REFCURSOR;

BEGIN

OPEN?return_cursor?FOR?SELECT?*?FROM?test_main?WHERE?id?=?p_id;

RETURN?return_cursor;

END;

/

SQL?SELECT?Get_Test_Main(2)?FROM?dual;

GET_TEST_MAIN(2)

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

CURSOR?STATEMENT?:?1

CURSOR?STATEMENT?:?1

ID?VALUE

----------?--------------------

2?TWO

返回游標(biāo)的函數(shù),不是?“表值函數(shù)”

SQL?SELECT?*?FROM?Get_Test_Main(2);

SELECT?*?FROM?Get_Test_Main(2)

*

ERROR?位于第?1?行:

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

oracle 用函數(shù)查詢(xún)?cè)趺粗苯臃祷匾粋€(gè)表?

返回cursor的話,那么必須要cursor的手段來(lái)處理,不能作為查詢(xún)語(yǔ)句的目的表。

如果需要在函數(shù)返回一個(gè)可以供查詢(xún)語(yǔ)句使用的結(jié)果集,那么該函數(shù)的返回類(lèi)型應(yīng)該定義為一個(gè)索引表類(lèi)型(一個(gè)table類(lèi)型),然后在查詢(xún)語(yǔ)句中使用table函數(shù)將函數(shù)返回的索引表轉(zhuǎn)換成查詢(xún)可以使用的目的表。示例如下:

1. 創(chuàng)建返回索引表所需的類(lèi)型

create?or?replace?type?type_rec?is?object?(idx?integer,?user_name?varchar2(50));

create?or?replace?type?type_tb?is?table?of?type_rec;

2. 創(chuàng)建函數(shù)

create?or?replace?function?fn_return_tb

return?type_tb

is

o_tb?type_tb?:=?type_tb();

i?number?:=?0;

begin

for?v_rec?in?(select?1?as?idx,?'Andy'?as?user_name?from?dual

union?select?2,?'Jack'?from?dual

union?select?3,?'Paul'?from?dual)?loop

o_tb.extend;

i?:=?i?+?1;

o_tb(i)?:=?type_rec?(v_rec.idx,?v_rec.user_name);

end?loop;

return?o_tb;

end?fn_return_tb;

3. 調(diào)用函數(shù)

select?s.*?

from?table(fn_return_tb())?s;

執(zhí)行結(jié)果如下圖,

oracle 用一個(gè)函數(shù)返回一張表,即在函數(shù)里創(chuàng)建表,然后返回一個(gè)表名。

oracle的function是不能執(zhí)行ddl的 就是類(lèi)似創(chuàng)建表這種不用commit的操作

返回表名 比如你傳入一個(gè)表名 就返回它 可以建一個(gè)function 但只是學(xué)習(xí) 沒(méi)什么意義

create or replace function testFunction(table_name in varchar2)

return varchar2 is

begin

return table_name;

end;

oracle如何執(zhí)行存儲(chǔ)過(guò)程以及如何返回一個(gè)table

-- 定義類(lèi)型

CREATE OR REPLACE TYPE MyTable AS OBJECT(A int, B int, C int);

/

CREATE OR REPLACE TYPE MyTableResult IS TABLE OF MyTable;

/

CREATE OR REPLACE FUNCTION getTestTable return MyTableResult

IS

-- 預(yù)期返回結(jié)果.

return_Result? MyTableResult := MyTableResult();

BEGIN

-- 結(jié)果追加一行.

return_Result.EXTEND;

-- 設(shè)置結(jié)果內(nèi)容.

return_Result(return_Result.COUNT) := MyTable(A?? = 1, B=2, C=3);

-- 結(jié)果追加一行.

return_Result.EXTEND;

-- 設(shè)置結(jié)果內(nèi)容.

return_Result(return_Result.COUNT) := MyTable(A?? = 4, B=5, C=6);

-- 結(jié)果追加一行.

return_Result.EXTEND;

-- 設(shè)置結(jié)果內(nèi)容.

return_Result(return_Result.COUNT) := MyTable(A?? = 7, B=8, C=9);

return return_Result;

END getTestTable;

/

SQL SELECT

2??? A, B, C

3? FROM

4?? table( getTestTable() );

A????????? B????????? C

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

1????????? 2????????? 3

4????????? 5????????? 6

7????????? 8????????? 9

SQL?

oracle怎么創(chuàng)建返回表的函數(shù)和過(guò)程?

作為結(jié)果返回,這正是引用游標(biāo)SYS_REFCURSOR或者類(lèi)型TABLE TYPE來(lái)實(shí)現(xiàn)的功能。

網(wǎng)站標(biāo)題:oracle返回表怎么寫(xiě),oracle 函數(shù)返回值 列表
當(dāng)前URL:http://chinadenli.net/article13/dsedjgs.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站服務(wù)器托管網(wǎng)站設(shè)計(jì)動(dòng)態(tài)網(wǎng)站品牌網(wǎng)站建設(shè)網(wǎng)站制作

廣告

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

成都定制網(wǎng)站建設(shè)