當前位置:首頁 » 存儲配置 » oracle存儲過程返回table

oracle存儲過程返回table

發布時間: 2023-02-23 06:22:28

㈠ oracle存儲過程 中把臨時表數據 返回結果集

用索引錶快一些,然後使用select * from table(存儲過程名(參數列表....))輸出。

㈡ oracle如何執行存儲過程以及如何返回一個table

sql">-- 定義類型
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
-- 預期返回結果.
return_Result MyTableResult := MyTableResult();
BEGIN
-- 結果追加一行.
return_Result.EXTEND;
-- 設置結果內容.
return_Result(return_Result.COUNT) := MyTable(A => 1, B=>2, C=>3);
-- 結果追加一行.
return_Result.EXTEND;
-- 設置結果內容.
return_Result(return_Result.COUNT) := MyTable(A => 4, B=>5, C=>6);
-- 結果追加一行.
return_Result.EXTEND;
-- 設置結果內容.
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>

㈢ mybatis怎樣接收oracle資料庫存儲過程所返回的Table類型數據和array

幫你看了半天,沒有找到好的解決辦法,變相方法是可以在plsql中返回一個ref cursor,java中直接用resultset就能接收了。

希望其他人能回答你的問題吧。。

㈣ 在Oracle存儲過程中查詢的數據結果怎樣返回

oracle 跟ms不一樣。
要返回表的記錄數據,只能通過游標,或者自定義對象數組在存儲過程中組裝好後返回。

㈤ oracle存儲過程可以返回內容嗎

可以的。
返回一個游標社!
有倆種方法:
一種是聲明系統游標,一種是聲明自定義游標,然後後面操作一樣,參數類型為
in out 或out
(1)聲明個人系統游標.(推薦)
create or replace p_temp_procere
(
cur_arg out sys_refcursor; --方法1
)
begin
open cur_arg for select * from tablename;
end
調用
declare
cur_calling sys_refcursor;
begin
p_temp_procere(cur_calling); --這樣這個游標就有值了
for rec_next in cur_calling loop
....
end loop;
end;

㈥ java怎樣接受oracle資料庫的存儲過程所返回的Table類型數據

先在Oracle中建立視圖,利用Oracle的PLSQL編寫視圖來顯示存儲過程的內容,再用Java訪問沒問題的。

㈦ ORACLE 存儲過程怎麼返回臨時表結果集

我剛做的,參考下:
SQL> CREATE GLOBAL TEMPORARY TABLE REPROTTEST(
2 ID NUMBER,
3 ANAME VARCHAR2(20)
4 ) ON COMMIT DELETE ROWS;(也可以用PRESERVER ROWS,看實際需求)

Table created

SQL> create or replace procere 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 /

Procere 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('輸出結果:'||v_id||','||v_aname);
10 fetch o_cur into v_id,v_aname;
11 end loop;
12 commit;
13 end;
14 /

輸出結果:1,1

PL/SQL procere successfully completed

你的那個ORA-01031: insufficient privileges,是許可權不足的問題。
SQL代碼:

CREATE GLOBAL TEMPORARY TABLE REPROTTEST(
ID NUMBER,
ANAME VARCHAR2(20)
) ON COMMIT DELETE ROWS;

create or replace procere 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('輸出結果:'||v_id||','||v_aname);
fetch o_cur into v_id,v_aname;
end loop;
commit;
end;
/

㈧ java怎樣接受oracle資料庫的存儲過程所返回的Table類型數據和array

給你段代碼參考,絕對可以:
使用cs.registerOutParameter(2, OracleTypes.STRUCT, DBI.TYPE.T_SMS_TASK);
OracleTypes.STRUCT,表示自定義的table類型, DBI.TYPE.T_SMS_TASK這個是你在oracle裡面創建的類型。
我這里相當於返回了一個 自定義的type的index by 表。

public static SMSTaskObj selectSmsTask(int terminateTime) {
ICallableStatement cs = null;
SMSTaskObj taskObj = null;
try {
cs = DbFactory.getInstance().getCallableStatement(
DBI.SERVER_DB_NAME, PROC_SEL_SMS_TASK);

cs.setInt(1, terminateTime);
cs.registerOutParameter(2, OracleTypes.STRUCT, DBI.TYPE.T_SMS_TASK);
cs.registerOutParameter(3, OracleTypes.INTEGER);
cs.execute();

int retVal = cs.getInt(3);

if (retVal != 0) {
throw new Exception("Oracle procere PROC_SEL_SMS_TASK error!");
}

STRUCT struct = (STRUCT) cs.getObject(2);

Datum[] dt = struct.getOracleAttributes();

if (String.valueOf(dt[0].bigDecimalValue()).equals("-1")) {
return null;
}

taskObj = new SMSTaskObj();

taskObj.setTaskId(String.valueOf(dt[0].bigDecimalValue()));
taskObj.setTempId(String.valueOf(dt[1].bigDecimalValue()));
taskObj.setUserGroupId(String.valueOf(dt[2].bigDecimalValue()));
taskObj.setUserId(String.valueOf(dt[3].bigDecimalValue()));
taskObj.setTempContent(dt[4].toString());
taskObj.setParamAmount(dt[5].intValue());
taskObj.setPriorityLevel(String.valueOf(dt[6].intValue()));

} catch (Exception ex) {
log.error(ex);
} finally {
try {
if (cs != null)
cs.close();

} catch (SQLException sqle) {
log.error(sqle);
}
}
return taskObj;
}

㈨ Oracle存儲過程創建臨時表,插入數據後,怎麼返回臨時表數據,並在asp.net中接收到datatable中

建一個視圖好啦.把結果存起來:
CREATE VIEWVIEW_NAME AS
SELECT * FROM A
UNION ALL
SELELCT * FROM B
這樣就會把兩張的表內容同時存在視圖:VIEW_NAME中.並且還會時時更新.即方便又節省空間.

㈩ oracle 存儲過程如何返回tbale

與SQL Server的存儲過程和函數均可以返回結果集不同的是,PL/SQL的存儲過程和函數均不直接提供返回數據集的方法,但可以通過返回類型對象來實現返回數據集的效果。具體思路為:
(1)創建包頭,在其中聲明類型和存儲過程,類型應該引用游標;
(2)創建包體,定義存儲過程,執行查詢,將查詢得到的結果集以游標句柄的形式返回。
說明:游標分為顯示游標和隱式游標,任何查詢結果默認都提供隱式游標,當前方案的重點在於使用游標取得查詢結果的句柄,由於游標被引用為類型,通過返回類型,即等效於(並不等同)返回數據集。

具體的案例如下:
--創建包頭
create or replace package mypackage1
as
--聲明類型,並引用游標
type cursorType is ref cursor;
--聲明存儲過程,兩個輸入參數,一個輸出參數,輸出遊標類型數據
procere prcGetGlobalAddress
(
pos1 integer, --分頁查詢的下限
pos2 integer, --分頁查詢的上限
cur in out mypackage1.cursorType --輸出參數,數據類型為引用游標的類型
);
end mypackage1;

--創建包體
create or replace package body mypackage1
as
--定義存儲過程
procere prcGetGlobalAddress
(
pos1 integer,
pos2 integer,
cur in out mypackage1.cursorType
)
as
begin
--返回得到分頁查詢結果集的游標句柄
open cur for
select *
from ( select a.*,rownum rn
from ( select *
from tblsys_globaladdress) a
where rownum<=pos2)
where rn > =pos1;
end prcGetGlobalAddress;

end mypackage1;

熱點內容
Char在sql 發布:2025-07-10 10:19:19 瀏覽:780
請密碼不叫什麼說話 發布:2025-07-10 10:06:22 瀏覽:113
蘋果應用怎麼設置密碼 發布:2025-07-10 10:04:00 瀏覽:838
雪國腳本 發布:2025-07-10 10:04:00 瀏覽:937
編程讓 發布:2025-07-10 09:48:13 瀏覽:359
資料庫邏輯存儲結構 發布:2025-07-10 09:26:56 瀏覽:920
密碼編譯找規律 發布:2025-07-10 09:18:10 瀏覽:512
電影視頻緩存後 發布:2025-07-10 09:16:48 瀏覽:894
伺服器搭建需要哪些東西 發布:2025-07-10 09:15:23 瀏覽:803
無限密碼怎麼改 發布:2025-07-10 09:14:32 瀏覽:106