存儲過程返回數據集
A. 幫忙寫個oracle 存儲過程,可以返回表的所有列的結果集
與sql Server的存儲過程和函數均可以返回結果集不同的是,PL/SQL的存儲過程和函數均不直接提供返回數據集的方法,但可以通過返回類型對象來實現返回數據集的效果。具體思路為:
(1)創建包頭,在其中聲明類型和存儲過程,類型應該引用游標;
(2)創建包體,定義存儲過程,執行查詢,將查詢得到的結果集以游標句柄的形式返回。
說明:游標分為顯示游標和隱式游標,任何查詢結果默認都提供隱式游標,當前方案的重點在於使用游標取得查詢結果的句柄,由於游標被引用為類型,通過返回類型,即等效於(並不等同)返回數據集。
具體的案例如下:
--創建包頭
create or replace package mypackage1
as
--聲明類型,並引用游標
type cursorType is ref cursor;
--聲明存儲過程,兩個輸入參數,一個輸出參數,輸出遊標類型數據
procere prcGetGlobalAddress
(
cur in out mypackage1.cursorType --輸出參數,數據類型為引用游標的類型
);
end mypackage1;
--創建包體
create or replace package body mypackage1
as
--定義存儲過程
procere prcGetGlobalAddress
(
cur in out mypackage1.cursorType
)
as
begin
--返回得到分頁查詢結果集的游標句柄
open cur for
select * from mytable;
end prcGetGlobalAddress;
end mypackage1;
B. sql中如何通過存儲過程返回結果集
引用
4
樓
oraclefans_
的回復:想麻煩了。。你直接返回遊標就是一個結果集合。。CREATE
OR
REPLACE
PROCEDURE
USP_RETN_VAL(
RETN_VAL_CUR
OUT
sys_refcursor)ISBEGIN
OPEN
RETN_VAL_CUR
FOR
SELECT
*
FROM
TBL1;END;調用declare
cur
sys_refcurso……謝謝
但是我是想執行一個存儲過程後,直接返回表裡所有數據,不要再去操作游標。
C. SQL SERVER怎麼獲取存儲過程返回的數據集
數據集可以用print的方式返回。
1、創建測試表、插入數據:
createtabletest
(idintnotnull,
namevarchar(10))
insertintotestvalues(1,'張三')
insertintotestvalues(2,'李四')
表裡數據如圖:
D. C#調用oracle存儲過程返回數據集
///<summary>
///執行存儲過程
///</summary>
///<paramname="storedProcName">存儲過程名</param>
///<paramname="parameters">存儲過程參數</param>
///<paramname="tableName">DataSet結果中的表名</param>
///<returns>DataSet</returns>
publicstaticDataSetRunProcere(stringstoredProcName,IDataParameter[]parameters,stringtableName)
{
using(OracleConnectionconnection=newOracleConnection(connectionString))
{
DataSetdataSet=newDataSet();
connection.Open();
OracleDataAdaptersqlDA=newOracleDataAdapter();
sqlDA.SelectCommand=BuildQueryCommand(connection,storedProcName,parameters);
sqlDA.Fill(dataSet,tableName);
connection.Close();
returndataSet;
}
}
///<summary>
///構建OracleCommand對象(用來返回一個結果集,而不是一個整數值)
///</summary>
///<paramname="connection">資料庫連接</param>
///<paramname="storedProcName">存儲過程名</param>
///<paramname="parameters">存儲過程參數</param>
///<returns>OracleCommand</returns>
(OracleConnectionconnection,stringstoredProcName,IDataParameter[]parameters)
{
OracleCommandcommand=newOracleCommand(storedProcName,connection);
command.CommandType=CommandType.StoredProcere;
foreach()
{
command.Parameters.Add(parameter);
}
returncommand;
}
E. 如何在PB中執行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;
(2)在包頭中申明一個游表類型,然後調用者申明一個這個類型的游標變數,傳給返回遊標的存儲過程 ,存儲過程out這個結果集,這種方法很麻煩.游標類型不能像索引表一樣使用create or replace type方法來創建,所以只能在包中申明,並且需要使用/來執行,後面的存儲過程才認這個游標類型.(不推薦,但是建議要知道並且要會這種方式,畢竟它有它存在的道理)
--定義全局變數
create or replace package pkg_package
as
type type_cursor is ref cursor;
type type_record is record
(
test01 varchar2(32),
test02 varchar2(32),
test03 varchar2(32)
);
end;
/
--創建返回遊標的存儲過程
create or replace procere p_temp_procere
(
cur_out_arg out pkg_package.type_cursor
)
is
begin
open cur_out_arg for select * from test;
end;
/
--調用
declare
cur_out_arg pkg_package.type_cursor;
rec_arg pkg_package.type_record;
begin
p_temp_procere(cur_out_arg);
fetch cur_out_arg into rec_arg;
dbms_output.put_line(rec_arg.test01);
dbms_output.put_line(rec_arg.test02);
dbms_output.put_line(rec_arg.test03);
end;
F. oracle 通過調用存儲過程,得到數據集
我也是初學者,不是什麼高手,根據我的理解提出我的看法,僅供參考:
(1)函數function的參數必須都是in類型的,必須要有返回值
它可以被sql語句或者存儲過程調用
例如:
--定義一個函數,返回傳入的參數本身
create or replace function TestFunOne(argsOne in varchar2) return varchar2 is
resultStr varchar2(500);
begin
resultStr := argsOne;
return(resultStr);
end TestFunOne;
sql語句中可以這樣用: update tableName t set t.columnName = TestFunOne('1')
存儲過程中可以這樣用:
create or replace procere getNameByFincode(inputStr in varchar2,
resultStr out varchar2) is
begin
resultStr := TestFunOne(inputStr);
end getNameByFincode;
(2)java程序中一般是直接執行sql語句或者調用存儲過程
java執行sql語句可以這樣:
String sql="update tableName t set t.columnName = TestFunOne('1')";
stmt.executeUpdate(sql);
java中調用存儲過程可以這樣:
CallableStatement callStmt = connection.prepareCall("call getNameByFincode(?,?)");
以上都是最簡單的例子,具體展開網上也都可以查閱,希望能解決你的問題O(∩_∩)O~
G. 怎樣讓SqlServer的存儲過程返回結果集
1、返回結果集
這是客戶端應用程序返回結果的最通用的方法。結果集是通過使用SELECT語句選擇數據產生的。結果集可以從永久表、臨時表或局部變數中產生。將結果返回到另一個存儲過程不是一種有效的方法。存儲過程不能訪問另一個存儲過程建立的結果集。
例如從永久表中返回結果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromPermtable
AS
SELECT au_iname FROM authors
例如從局部變數中創建結果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromVariable
AS
DECLARE @au_iname char(20)
SELECT @au_iname = au_iname FROM authors
WHERE au_id = 『172-32-1176』
SELECT @au_id
GO