簡體   English   中英

如何從存儲過程返回值

[英]How to return value from stored procedure

我有一個MySql過程,該過程獲取一些輸入參數,結果選擇了一個像這樣的值:

declare rez int;
///
...some other code...
///
select rez;

現在,我想從另一個存儲過程中調用該存儲過程並獲得“選定”值。 我嘗試過這樣的事情:

declare myVar int;
set myVar = call existingStoredProcedure();

但不會。 我應該怎么做? 我一直在尋找解決方案,發現的所有解決方案都以“ create> existingStoredProcedure <with OUT param”開頭。 對我來說,這不是一個選擇-無法更改“ existingStoredProcedure”,因為它已在應用程序的許多部分中使用,因此添加另一個參數將要求我做很多更改。

有沒有一種方法可以在不添加“ out”參數的情況下返回值? 我是一名Java程序員,所以如果mysql存儲過程可以“將”選定的行和值“返回”到放置調用的任何實體,那就太好了:)

如果過程僅執行select語句,則可以將結果讀入ResultSet的實例。

CallableStatement cst = con.prepareCall( "{call sql_procedureName()}" );
ResultSet rs = cst.executeQuery();

工作示例

讓我們說,您有一個存儲過程,該過程返回當前日期和當前日期名稱。

drop procedure if exists today;
create procedure today() 
    select @dt:=current_date as today, dayname( @dt ) as dayname;

現在,從JAVA程序中調用相同的代碼。

CallableStatement cst = con.prepareCall( "{call today()}" );

ResultSet rs = cst.executeQuery();
ResultSetMetaData  rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
System.out.println( "Column Count: " + columnCount );
for ( int i = 1; i <= columnCount; i++ ) {
    System.out.print( ( i == 1 ? "Column Names: " : ", " ) 
                        + rsmd.getColumnLabel( i ) );
} // for each column
System.out.println();

int rowNumber = 1;
while( rs.next() ) {
    for ( int i = 1; i <= columnCount; i++ ) {
        System.out.print( ( i == 1 ? ( "Record " + rowNumber++ + ": " ) : ", " ) 
                         + rsmd.getColumnLabel( i ) + ": " + rs.getString( i ) );
    } // for each column
    System.out.println();
} // while rs

輸出

Column Count: 2
Column Names: today, dayname
Record 1: today: 2014-04-03, dayname: Thursday

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM