當前位置:首頁 » 存儲配置 » sybase存儲過程調試

sybase存儲過程調試

發布時間: 2023-12-01 20:36:42

Ⅰ sybase存儲過程中怎麼調用存儲過程

1.begin tran
.....(sql)
if @@error=0
commit
else
rollback
2.exec 另一個存儲過程名 參數...

Ⅱ 請教sybase的存儲過程中如何實現動態sql

1.EXEC的使用
EXEC命令有兩種用法,一種是執行一個存儲過程,另一種是執行一個動態的批處理。以下所講的都是第二種用法。
下面先使用EXEC演示一個例子,代碼1
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);

sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要為重用執行計劃提供更好的支持。
為了和EXEC作一個鮮明的對比,我們看看如果用代碼1的代碼,把EXEC換成sp_executesql,看看是否得到我們所期望的結果
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql

Ⅲ sybase 存儲過程

因為你在存儲過程中使用的是變數,而沒有使用輸入參數,如果將你的這個變數聲明成輸入參數,就可以實現了。create proc data(@username varchar(20)) as . begin ..... end.

Ⅳ 講解Sybase存儲過程的建立和使用

存儲過程的特點

Sybase的存儲過程是集中存儲在SQL Server中的預先定義且已經編譯好的事務 存儲租缺過程由SQL語句和流程式控制制語句組成 它的功能包括:接受參數;調用另一過程;返回一個狀態值給調用過程或批處理 指示調用成功或失敗;返回若干個參數值給調用過程或批處理 為調用者提供動態結果;在遠程SQL Server中運行等

存儲過程的性能特點如下:

·存儲過程是預編譯過的 這就意味著它與普通的SQL語句或批處理的SQL語句不同 當首次運行一個存儲過程時 SQL Server的查詢處理器對其進行分析 在排除了語法錯誤之後形成存儲在系統中的可執行方案 由於查詢處理的大部分工作已經完成 所以存儲過程執行速度很快

·存儲過程和待處理的數據都放在同一台運行SQL Server的計算機上 使用存儲過程查詢當地的數據 效率自然很高

·存儲過程一般多由Client端通過存儲過程的名字進行調用 即跨網傳送的只是存儲過程的名字及少量的參數(如果有的話) 而不是構成存儲過程的許多SQL語句 因此可以減少網路傳輸量 加快系統響應速度

·存儲過程還有著如同C語言子函數那樣的被調用和返回值弊搭辯的方便特性

所以 存儲過程大大增強了SQL語言的功能 效率和靈活性 掌握和應用好存儲過程 對進一步發揮Sybase資料庫系統的強大功能有著重要的意義

存儲過程的語法規則

建立存儲過程的語法規則為:

CREATEPROCere[owner ]procerename[;number] [[(]@parameter_namedatatype[=default][OUTput] [ @parameter_namedatatype[=default][OUTput]] [)]] [WITHREPILE] ASSQL_statements

使用存儲過程的語法規則為:

[EXECute][@return status=] [[[server ]database ]owner ]procerename[;number] [[@parameter_name=]value|[@parameter_name=]@varialbe[OUTput] [ [@parameter_name=]value|[@parameter_name=]@variable[OUTput] ]] [WITHREPILE]

[page]下面簡要介紹這兩個命令的常用選項以及建立和使用存儲過程的要點 關於選項的更為詳細的說明請參考有關手冊

·[[[server ]database ]owner ]procere_name:存儲過程的名字

·@parameter_name datatype[=default][OUTput]:形式參數(形參)的名稱 類型 df ault是賦予的預設值(可選) OUTput指定本參數為輸出參數(可選) 形參是存儲過程中的自變數 可以有多個 名字必須以@打頭 最長 個字元

·SQL_statements:定義存儲過程功能的SQL語句

·@return_status:接受存儲過程返回狀態值的變數

·[@parameter_name=]value:實際參數(實參) @parameter_name為實參的名稱(可選) 如果某個實參以@parameter_name=value提供 那麼隨後的實參也都要採用這一形式提供

·[@parameter_name=]@varialbe[OUTput]:將變數@varialbe中的值作為實參傳遞給形參@parameter_name(可選) 如果變數@varialbe是用來接受返回的參數值 則選項OUTput不可缺少

存儲過程的建立和使用 我們將通過幾個例子進行枝配介紹

假設有一個用下述語句生成的技能工資表RS LS GZ JiNeng:

create table RS_LS_GZ_JiNeng /*技能工資表*/

(GeRen_id char( ) /*個人代碼 */

RiQi *** alldatetime /*執行日期 */

YuanYin_id char( ) null /*變動原因代碼 */

JinE *** allmoney) /*技能工資金額 */

該表存儲著某單位員工多年來技能工資的歷史檔案

例 如果要查詢全體員工的技能工資變動歷史 則可先建立一個存儲過程p RsGz JiNeg All:

createprocerep_RsGz_JiNeng_Allas select* fromRS_LS_GZ_JiNeng orderbyGeRenid RiQi

然後用批處理語句調用存儲過程p_RsGz_JiNeng_All進行查詢:

execute p_RsGz_JiNeng_All

本例只顯示查詢到的數據 無輸入 輸出參量 是最簡單的一個存儲過程

例 如果要查詢某人技能工資的變動歷史 可建立另一個存儲過程p_RsGz_JiNeng:

createprocerep_RsGz_JiNeng@c_GeRenIdchar( ) as select*fromRS_LS_GZ_JiNeng whereGeRen_id=@c_GeRenId orderbyRiQi

之後用批處理語句調用存儲過程p_Rs_Gz_JiNeng進行查詢:

declare @GeRenId char( )

select @GeRenId= /*設要查詢員工的個人代碼為 */

execute p_RsGz_JeNeng @c_GeRenId=@GeRenId

存儲過程p_RsGz_JiNeng中定義了一個形參@c_GeRenId 是字元型變數 在調用該過程的批處理中 既可以用具體的值也可以用變數作為實參 用變數作實參(如本例)時 必須用del are語句加以說明 值得注意的是 在批處理的調用過程語句中 @c_GeRenId=@GeRenId中的@ c_GeRenId是存儲過程p_RsGz_JiNeng中的形參名 不是批處理中的變數 所以不能將它列入d eclare語句的變數單中

例 如果要計算當月工資 就必須從工資歷史中查出員工距離當前最近的一次技能工資變動的結果:

createprocerep_RsGz_JiNeng_Slt (@c_GeRenIdchar( ) @ *** _JinE *** allmoneyoutput) as select@ *** _JinE=JinE fromRS_LS_GZ_JiNeng whereRiQi=(selectmax(RiQi) fromRS_LS_GZ_JiNeng

where GeRenid=@c GeRenId)/*找出歷史記錄中距離當前最近的日期*/

調用存儲過程p_RsGz_JiNeng_Slt進行查詢:

declare@GeRenIdchar( ) @JinE *** allmoney select@GeRenid= /*設要查詢員工的個人代碼為 */ select@JinE= executep_RsGz_JiNeng_slt@c_GeRenId=@GeRenId @ *** _JinE=@JinEoutput

這里 變數 @JinE用來存儲過程形參@ *** _JinE傳回的金額 在調用過程語句中 @ *** _JiE = @JinE output中的output不可省略 否則 變數@JinE將得不到形參傳回的數值而始終為零(等於初值)

例 查到了個人代碼為 員工的技能工資就顯示其歷史紀錄 查不到則顯示一條出錯信息

createprocerep_RsGz_JiNeng_Rtn @c_GeRenIdchar( ) as declare@ErrCode *** allint select@ErrCode= ifexists(select*fromRS LS GZ JiNeng whereGeRenid=@c GeRenId) begin select* fromRS_LS_GZ_JiNeng whrerGeRen_id=@c_GeRenId orderbyRiQi return@ErrCodE end eslE begin select@ErrCode= return@ErrCodE end

調用存儲過程p_RsGz_JiNeng_Rtn:

declare@GeRenIdchar( ) @RtnCode *** allint select@GeRenId= select@RtnCode= execute@RtnCode=p_RsGz_JiNeng_Rtn@c_GeRenId=@GeRenId if@RtnCode= print Nothisone!

存儲過程p_RsGz_JiNeng_Rtn向調用者返回一個存儲在變數@ErrCode里的值 這個值被稱為狀態值 它向調用者反映存儲過程執行的成敗狀態 在本例中 如果查不到指定員工技能工資的任何記錄時 就認為 查無此人 返回出錯狀態值 否則 返回成功狀態值

調用過程的批處理語句使用變數@RtnCode存儲返回的狀態值 一旦檢出存儲過程p_RsG_ JiNeng_Rtn返回了錯誤標志(@RtnCode= ) 就顯示一條信息 No this one! [page]

小結

上述四個例子簡要介紹了存儲過程常用的幾種形式 從中我們已經可以領略到它的編程特色以及使用上的靈活性和方便性

lishixin/Article/program/Oracle/201311/17494

Ⅳ sybase 資料庫的存儲過程怎麼寫

//給你個舉個列,html控制項數組的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>

Ⅵ 如何獲取Sybase存儲過程返回值

我的這個例子就返回了1個結果集。為了使問題表達更加清楚,這些是我簡化了的代碼,並用此代碼進行了調試。並且總結出了問題的規律:先rdr.read(),如果讀到了,則後面的ret必然等於0,否則可以拿到返回值。

linux環境下如何查看sybase資料庫中有哪些表有哪些存儲過程如何把sybase資料庫導出

可以用以下SQL語句查找存儲過程:

selectdistinctname
fromsysobjects
wheretype='P'

如何查看SYBASE資料庫中的所有表名?看如下SQL語句:

="U";

如何把sybase資料庫導出,使用如下:

mpdatabasefromsybase1to"/mysybase.mp";

sybase1是你的資料庫名,/mysybase.mp表示linux根目錄下,保存為mysybase.mp。

Ⅷ 如何查看sybase存儲過程的內容

使用sybase central來查看。在表名上點右鍵,選擇屬性,點「依賴性」按鈕,在引用者頁面中,下拉列表選擇「過程」,就可以看到引用該表的所有存儲過程了。

Ⅸ JDBC調用Sybase存儲過程,結果集總是無法返回,該怎麼處理

JDBC調用Sybase存儲過程,結果集總是無法返回!
java代碼部分如下:
String sproc = "{ call zhouxiaobotest2(?,?,?,?)} ";
CommonDAO = null;
try {
= new CommonDAO(jndi);
Connection connect = .getConn();

//得到總數
rowNum = PageDiv.getCount(countSql.toString(), );

//設置分頁信息
pageBean.setPageInfo(rowNum, pageSize);

// 獲取CallableStatement語句:
CallableStatement mStatement = connect.prepareCall(sproc,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

// 傳入輸入參數和注冊輸出參數
mStatement.setString(1,sql.toString());
mStatement.setInt(2, 10);
mStatement.setInt(3, 10);
mStatement.setInt(4, 5000);

// 執行存儲過程
ResultSet rs = null;
mStatement.execute();
rs = mStatement.getResultSet();

catch (Exception ex) {
ex.printStackTrace();
logger.warn(sql.toString());
} finally {
.destroy();
= null;
sproc = null;
}

存儲過程如下:
create procere zhouxiaobotest @qry varchar(16384),@ipage int, @num int,@maxpages int
as
/*@qry SQL語句, @ipage 頁數, @num 每頁記錄條數, @maxpages 最大查詢頁數 */
begin

declare @execsql varchar(16384)

set @execsql = " select USER_NAME from TBL_USER "

execute (@execsql)

end

create procere zhouxiaobotest2 @qry varchar(16384),@ipage int, @num int,@maxpages int
as
/*@qry SQL語句, @ipage 頁數, @num 每頁記錄條數, @maxpages 最大查詢頁數 */
begin

select USER_NAME from TBL_USER

end

現在我的問題是調用存儲過程zhouxiaobotest,mStatement.execute()始終是false;而調用zhouxiaobotest2 mStatement.execute()就是true,能得到結果集。我想知道如何修改程序使我能夠調用zhouxiaobotest取得結果集(之前調試程序運行沒有拋出任何異常,而且控制台運行存儲過程也都正確)

熱點內容
怎麼用安卓手機查蘋果的序列號 發布:2024-11-29 06:21:08 瀏覽:507
r11s原始密碼是多少 發布:2024-11-29 05:52:20 瀏覽:79
c語言枚舉法 發布:2024-11-29 05:50:58 瀏覽:125
大數據系統如何配置 發布:2024-11-29 05:48:44 瀏覽:89
連戰訪問西安小學 發布:2024-11-29 05:45:03 瀏覽:316
怎麼編譯原生安卓手機 發布:2024-11-29 05:44:28 瀏覽:193
java代碼編譯java文件 發布:2024-11-29 05:44:27 瀏覽:208
如何部署遠程伺服器 發布:2024-11-29 05:34:37 瀏覽:523
紅米系統存儲與手機存儲 發布:2024-11-29 05:33:55 瀏覽:198
qt反編譯工具 發布:2024-11-29 05:29:31 瀏覽:480