存儲過程返回對象
數據集可以用print的方式返回。
1、創建測試表、插入數據:
createtabletest
(idintnotnull,
namevarchar(10))
insertintotestvalues(1,'張三')
insertintotestvalues(2,'李四')
表裡數據如圖:
㈡ C# 存儲過程返回兩個結果集(兩張表),如何獲取兩張表中的數據
首先聲明一個方法 傳兩個參數 一個是 Sql 語句 一個是你的表的名字
public DataSet getDataSet(string SQLstr, string tableName)
{
我這里寫的是方法調用打開的資料庫連接
你自己改 代開數據敗此庫連接
getcon(); //打開與資料庫的連接
//創建一個SqlDataAdapter對象,並獲取指定數據表的信息
同樣 兩個參數 一個 Sql 語句 一個 是聲明的SqlConnection 連接對象
SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
//創建DataSet對象
DataSet My_DataSet = new DataSet();
進行填充 SqlDataAdapter 實例化對象SQLda 下面的 Fill 方法 進行填充到DataSet中
一個是參數是你實例化的 DataSet 對象 一個是 你的表名
這里如果你是兩張表的話 那麼在填充一個就歷州OK 了
SQLda.Fill(My_DataSet, tableName);
//關閉資料庫的連接
con_close();
//返回DataSet對肢枯蔽象的信息
return My_DataSet;
採納哦 !祝你成功!
㈢ 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;
㈣ sql 存儲過程中return的使用方法
RETURN語句無條件終止查詢、存儲過程或批處理。存儲過程或批處理中RETURN語句後面的語句都不執行。
當在存儲過程中使用RETURN語句時,此語句可以指定返回給調用應用程序、批處理或過程的整數值。如果 RETURN 未指定值,則存儲過程返回 0。
大多數存儲過程按常規使用返回代碼表示存儲過程的成功或失敗。沒有發生錯誤時存儲過程返回值 0。任何非零值表示有錯誤發生。
調用存儲過程的應用程序可以將返回代碼所對應的參數標記與整型變數綁定。
(4)存儲過程返回對象擴展閱讀:
如果用戶定義一個函數有返回類型,可以像下面這樣調用:
intfunc(){intvalue;………………returnvalue;}intmain(){intintvalue;intvalue=func();…………return0;}
1、在返回類型是char的函數中,return後應該是char類型的值。
2、在返回類型是int的函數中,如果是要停止函數的調用,最好應該為0。
3、在返回類型是結構類型的函數中,return後應該是結構的一個實例對象。
總之,函數定義為什麼樣的返回類型,該函數中return後就應該是相應類型的值。
如果實在不需要函數返回什麼值,就需要用void聲明其類型。
補充:如果用戶函數名前有返回類型定義,如int,double等就必須有返回值,而如果是void型,則可以不寫return,但這時即使寫了也無法返回數值。
㈤ 存儲過程和函數的區別
一、含義不同
1、存儲過程:存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。
2、函數:是由一個或多個 SQL 語句組成的子程序,可用於封裝代碼以便重新使用。函數限制比較多,如不能用臨時表,只能用表變數等
二、使用條件不同
1、存儲過程:可以在單個存儲過程中執行一系列 SQL 語句。而且可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
2、函數:自定義函數諸多限制,有許多語句不能使用,許多功能不能實現。函數可以直接引用返回值,用表變數返回記錄集。但是,用戶定義函數不能用於執行一組修改全局資料庫狀態的操作。
三、執行方式不同
1、存儲過程:存儲過程可以返回參數,如記錄集,函數只能返回值或者表對象。存儲過程的參數有in,out,inout三種,存儲過程聲明時不需要返回類型。
2、函數:函數參數只有in,而函數需要描述返回類型,且函數中必須包含一個有效的return語句。
㈥ hibernate獲取存儲過程返回值
當然是他內部做的。 適合所有資料庫。 追問: 大俠。可否講明白點。舉個例子? 小的愚笨。還望指點 回答: hibernate提供了在*.hbm.xml中配置調用存儲過程,並通過向用戶提供session.getNamedQuery("…")方法來調用配置的調用查詢相關的存儲過程的方法,另外,hibernate還提供了卜悄取得sql的connection的方法,從而能夠通過connection中存儲過程調用相關的方燃滾法來實皮弊余現存儲過程的調用。 注意這兩種存儲過程的調用方式是不同的,在Hiberante是方便了查詢,它可以在*.hbm.xml中配置存儲過程返回值的信息,然後通過配置,就可以把返回值封裝成對象的集合。而使用持久化的存儲過程,那就還是要直接使用到JDBC調用存儲過程的API即使用到 CallableStatement對象。 追問: 目前我存儲過程中的返回值是 1,結果集 2,int 3,String你的意思。我在hbm.xml中配置完返回值後。不需要在java代碼中。像jdbc那樣。指明返回值嗎? 也就是說。我只要在代碼中query.setXXX(0,XXX);這個。指明。輸入參數就可以了》?out參數。直接用 List list = query.list();就能得到所有的返回值嗎? 回答: 不出意外的話就應該出來了。 呵呵你測試一下。
㈦ C#,EF中執行存儲過程返回一個ObjectResult對象,這個對象是延遲載入的嗎
ObjectResult,這個對象是延遲載入的,有機會可以到程序人生網站上交流。
㈧ MYSQL的存儲過程如何返回查詢到的行數據
out返回只能是確定的某種類型的一個值,例如VARCHAR或者INT等等,你想返回多條記錄的話只需要在最後加上一個或者多個SELECT語句就行了啊,然後在外面用ResultSet對象接住就行了。
㈨ C#中一個存儲過程返回兩個結果集,如下圖,該如何用Datagridview調用
執行存儲過程調用的是ADO.net
返回的結果集是一個DataSet對象。
如果不是,請檢查下你的數據連接庫,改下代碼。
如果存儲過程返回的是兩個結果集,那麼返回的DataSet就有兩個DataTable對象。
調用的時候
只需要
DataSet
ds=dbHelper.RunProcere("Web_pGetDataPager");//假設的返回dataset對象的執行存儲過程的方法。
ds.Tables[0]
就是第一個結果集
ds.Tables[1]
就是第二個結果集
//弱綁定第二個結果集
就是下面這樣
Datagridview.DataSource=ds.Table[1];
Datagridview.DataBind();
㈩ 如何創建MySQL存儲過程可以返回一個表類型的數據
首先需要知道「另一個存儲過程」的結果集的所有列的類型。
假設「另一個存儲過程」的名字是sp1,沒有參數,返回的結果集共3列,全部為int型,那麼「存儲過程」里添加一個與結果集列數相同的臨時表或表變數用於接收「另一個存儲過程」的結果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)
INSERT INTO @t(a,b,c)
EXEC sp1
SELECT * FROM @t
使用SQLSERVER存儲過程可以很大的提高程序運行速度,簡化編程維護難度,現已得到廣泛應用。
創建存儲過程
和數據表一樣,在使用之前需要創建存儲過程,它的簡明語法是:
引用:
Create PROC 存儲過程名稱
[參數列表(多個以「,」分隔)]
AS
SQL 語句
例:
引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要輸出的參數
AS
BEGIN
-- 將uName的值賦給 @ostrUserName 變數,即要輸出的參數
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END
其中 Create PROC 語句(完整語句為Create PROCEDURE)的意思就是告訴SQL SERVER,現在需要建立咐漏一個存儲過程,upGetUserName 就是存儲過程名稱,@intUserId 和 @ostrUserName 分別是該存儲過程的兩個參數,注意,在SQL SERVER中,所有用戶定義的變數都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是存儲過程內容了。只要將以上代碼在「查詢分析器」掘尺里執行一次,SQL SERVER就會在當前資料庫中創建一個名為「upGetUserName」的存儲過程。你可以打開「企業管理器」,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇「存儲過程」,此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。
二、存儲過程的調用
之前已經創建了一個名為「upGetUserName」的存儲過程,從字面理解該存儲過程的功能是用來取得某一個用戶的名稱。存儲過程建立好了,接下來就是要在應用程序里調用了,下面看一下在ASP程序里的調用。
引用:
Dim adoComm
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upGetUserName"
』// 設置用戶編號
.Parameters.Item("@intUserId").Value = 1
』// 執行存儲過程
.Execute
』// 取得從存儲過程返回的用戶名稱
Response.Write "用戶名:" & .Parameters.Item("@ostrUserName").Value
End With
』// 釋放對象
Set adoComm = Nothing
通過以上兩步,已經可以創建和使用簡單的存儲過程了。下面來看一個稍微復雜點的存儲過程,以進一步了解存儲過程的應用。
三、存儲過程的實際應用
用戶登錄在ASP項目中經常會使用到,但使用存儲過程來做驗證可能不多,那麼做例子,寫一個簡單的用戶登錄驗證衡散爛的存儲過程。
引用:
Create PROC upUserLogin
@strLoginName NVARCHAR(20),
@strLoginPwd NVARCHAR(20),
@blnReturn BIT OUTPUT
AS
-- 定義一個臨時用來保存密碼的變數
DECLARE @strPwd NVARCHAR(20)
BEGIN
-- 從表中查詢當前用戶的密碼,賦值給 @strPwd 變數,下面要對他進行比較
Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName
IF @strLoginPwd = @strPwd
BEGIN
SET @blnReturn = 1
-- 更新用戶最後登錄時間
Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName
END
ELSE
SET @blnReturn = 0
END
用戶登錄的存儲過程建立好了。注意,在一個區域內如果有多條語句時,必需使用BEGIN...END關鍵字。
引用:
Dim adoComm
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upUserLogin"
』// 設置登錄名稱
.Parameters.Item("@strLoginName").Value = "***"
』// 設置登錄密碼
.Parameters.Item("@strLoginPwd").Value = "123456"
』// 執行存儲過程
.Execute
』// 判斷是否登錄成功
If .Parameters.Item("@blnReturn").Value = 1 Then
Response.Write "恭喜你,登錄成功!"
Else
Response.Write "不是吧,好像錯了哦。。。"
End If
End With
』// 釋放對象
Set adoComm = Nothing
通過以上的步驟,簡單用戶登錄驗證過程也做完了,現在只要把它整合到程序中就可以實現簡單的用戶登錄驗證了,關於其他細節就由你自己來處理了。
上面介紹的兩個存儲過程都是只返回一個值的,下面我們來看一個返回一個記錄集的存儲過程。
引用:
Create PROC upGetUserInfos
@intUserGroup INT
AS
BEGIN
-- 從資料庫中抽取符合條件的數據
Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup
-- 插入一列合計
UNION
Select 』合計人數:』,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup
END
現在我們來看一下ASP程序的調用。
引用:
Dim adoComm
Dim adoRt
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upGetUserInfos"
』// 設置用戶組
.Parameters.Item("@intUserGroup").Value = 1
』// 執行存儲過程,和以上幾個例子不同,這里使用RecordSet的Open方法
adoRs.Open adoComm
』// 顯示第一個值
Response.write adoRs.Fields(0).Value
End With
』// 釋放對象
Set adoRs = Nothing
Set adoComm = Nothing