1. sybase存儲過程中怎麼調用存儲過程
1.begin tran
.....(sql)
if @@error=0
commit
else
rollback
2.exec 另族歲一個存儲數輪過程名 參兆畢睜數...
2. sybase資料庫中numeric(12)最大數是多少如何計算的
numeric[ (p[ ,s] )]
固定精度和小數位數。 使用最大精度時,有效值的范圍為 - 10^38 +1 到 10^38 - 1。 decimal 的 ISO 同義詞為 dec 和 dec(p、s)。 numeric 在功能上等價於 decimal。
p(精度)
最多可以存儲的十進制數字的總位數,包括小數點左邊和右邊的位數。 該精度必須是從 1 到最大精度 38 之間的值。 默認精度為 18。
s (小數位數)
小數點右邊可以存儲的十進制數字的最大位數。 小數位數必須是從 0 到 p 之間的值。 僅在指定精度後才可以指定小數位數。 默認的小數位數為 0;因此,0 <= s <= p。 最大存儲大小基於精度而變化。
你這個numeric(12)是最大就是12位整數,也就是12個9.
3. sybase 存儲過程
存儲過程是存儲在伺服器端的一類資料庫對象,它實質上是一段用SQL語言編寫的程序,它在伺服器端預先經過編譯,並確定出執行計劃,因此與同樣功能的批處理語句相比,它的執行速度較快。基本語法:Create Procere[owner.]過程名[@參數名 數據類型[=默認值][Output]][,@參數名 數據類型[=默認值][Output]][……]ASBeginSQL語句(塊)End存儲過程是資料庫對象,和表、索引是一個級別的;是SQL語句和控制流語言的集合,存儲過程在首次運行時被編譯,並駐留在過程高速緩存的內存中,所以存儲過程的招待非常快。存儲過程可以帶參數,可以調用其他過程,返回狀態值,返回參數值,並且可以在遠程SQL Server執行。可以在遠程SQL Server執行對資料庫設計有特別重要的意義。SQL Server提供的存儲過程稱為系統過程。存儲過程大大增強了悶氏斗SQL的能力、效率和靈活性,經過編譯的存儲過程極大地改善SQL語句和批處理的性能。存儲過程有很多優點:●存儲過程在第一次執行時編譯,並存儲在過程高速緩存的內存中。編譯時系統對其進行優化,以選擇最佳的路徑來訪問數據集中的數據,這種優化考慮了數據集的實際數據結構。因此存儲過程大大提高了系統的性能。●存儲過程可以跨伺服器運行。這一點是通過觸發器來實現的,當然,首先存儲過程要能登錄到該遠程伺服器。●應用程序也能執行存儲過程,從而實現伺服器和客戶之間的協同作業。●存儲過程減少了網路的交通。這是因為存儲過程的文本存儲在資料庫里,調用存儲過程時通過網路的只是存儲過程的過程名。●利用存儲過程可以提供一個附加的安全層。如(該例子取自pubs2資料庫):Create proc titleid_proc(@title_id varchar(80))AsBeginSelect @title_id=lower(@title_id) 」%」Select title,title_id,priceForm titlesWhere lower(title_id) like @title_idReturn @@rowcountEnd注意例子中的黑體部分,這實際上是一條賦值語句。該存儲過程有返回值。存儲過程可以變得非常復雜。我們認為,創建存儲過程還是要遵循「最簡單就是最好」的原則。建議在創建存儲過程時採用縮進風格,否則創建的存儲過程三天之後連自己都看不懂。需要對存儲過程作些說明:●Create procere 語句不能和其他語句在同一個批命令里。●Create procere 語句不能包括下列語句:useCreate ViewCreate defaultCreate ruleCreate triggerCreate procere不能使用use語句好理解,存核鏈儲過程是針對資料庫的,不能在一個資料庫里訪問另外的資料庫。如果在存儲過程里訪問另外的資料庫,則資料庫表的參照完整性難於得到保障。從另外幾條語句看,在存儲過程里一般不能創建新的資料庫對象。但可以創建表和索引,以及和表相關聯的鍵,表是臨時表,在存儲過程結束後不能看見創建的臨時表;否則的話每運行一次存儲過程就創建一個表,結果可想而知。存儲過程里不能創建一個對象,刪除它;然後又在同一存儲過程里用相同的名字創建新的對象。實際上,SQL Server在存儲過程運行時而不是在編螞磨譯時創建對象的。●如果存儲過程調用另外的存儲過程,則第二個存儲過程可以調用在第一個存儲過程里創建的對象。●存儲過程包含的最多參數為255個,對存儲過程里的局部和全局變數沒有限制。最後討論一下系統存儲過程。系統存儲過程以sp_開頭,當然用戶創建的存儲過程也可以以sp_開頭;系統過程保存在sybsystemprocs資料庫里。系統過程的使用有許可權,如果打入系統過程名但沒有出現預期的結果,要麼是命令名錯,要麼是使用者沒有該過程的許可權。一般可通過系統管理員或資料庫所有者對系統過程的execute授權。系統過程繁多,大致有幾類:a. 用戶標志和授權。這一類的過程主要由於:增加、刪除或報告在SQL Server上的登錄,增加、刪除或報告某資料庫的用戶、分組或別名等。這類過程有sp_addlogin,sp_adser,sp_helpgroup,sp_dropuser等。b. 遠程過程的調用。這類過程用於:增加、刪除或報告能存取本SQL Server的遠程伺服器;增加能從遠程伺服器上存取本SQL Server的用戶名。這類過程有:sp_addremotelogin,sp_addserver,sp_dropserver等。c. 數據定義和資料庫對象。這類存儲過程用於:連接和定義規則和預設值,增加、刪除或報告主碼、外碼和公共碼;增加、刪除或報告用戶定義的數據類型。這類存儲過程有:sp_bindfault, sp_bindrule, sp_help, sp_helpdb, sp_foreignkey, sp_helptext等。d. 系統管理。這類存儲過程用於:增加、刪除或報告資料庫及轉儲設備;報告鎖;設置的資料庫選擇及用戶正進行的進程;修改及報告配置變數;監控SQL Server的活動。這類過程有:sp_admpdevice,sp_dropdevice, sp_helpdevice等。
4. 怎樣傳遞sybase存儲過程中多個output參數
就那現在用的系統舉例吧。
NT4+sybase11.5 作資料庫服務端,sybase openclient 做辯銀客戶端昌灶汪
IIS+isapi or dynamo 做 WEB.
伺服器基本上不用設置,sybase 較為簡單,裝完就可用了。用
oracle ,你可就慘了光設參數。就要折騰死人。
用 delphi3開發還要設 ODBC BDE, ODBC中添加一項 DSN ,bde
中會自動顯示出來,設置好用耐仔戶後存檔,在D3中就可用了.
5. 講解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
6. 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取得結果集(之前調試程序運行沒有拋出任何異常,而且控制台運行存儲過程也都正確)
7. C# Sybase 中文參數出錯
使用陸升1、AseParameter param = new AseParameter("name"早鋒老, AseDbType.VarChar);導致基沒中文無法全部保存,這是因為不指定varchar長度時,默認好像是1個位元組吧。
你嘗試自己修改commandbuilder生成語句時數據類型的默認長度吧。
8. Sybase資料庫的基本原理: (1)、列方式的存儲,可以減少IO 那個IO是什麼
列存儲——有別於傳統的關系型資料庫,Sybase IQ是按照數據表中的列來存儲與訪問數據的。基於列來讀取數據,即使在數據不斷膨脹的情況下,你也只須讀出你想要了解的數據,避免了重復的全面掃描,顯著提供查詢速度,進而提升了性能指數P;同時,由於同一列中的所有數據域有相同的數據類型,因此,每一列都可以以更優化的效率和檢索進行壓縮,從而降低了佔用的資源T。
數據壓縮——正是由於數據按列存儲,相鄰的欄位值具有相同的數據類型,所以壓縮更容易,通常能得到大於50%的壓縮。在海量數據下,隨著數據的大幅壓縮,所佔用的空間等資源成本會顯著減少。因此,更大的壓縮比,加上大頁面,使得Sybase IQ在獲得優良查詢性能的同時,減少了對存儲空間的需求,因此佔用的資源T也大大降低了。
豐富的索引——傳統的關系型資料庫引擎只能一對一地解決問題,在數據爆炸的今天,如此「大海撈針」似的查詢會令反應速度非常遲緩。而Sybase IQ針對數據倉庫應用有多種不同的索引技術,並且這些技術中的每一個都與數據倉庫的查詢問題相吻合,從而顯著減少給定查詢或更新的工作量,加快查詢速度,自然帶動性能P的提升。
Multiplex可擴展能力——Sybase IQ的Multiplex組件增加了在單一的Sybase IQ環境中支持多個SMP機器節點的功能,顯著地減輕了進程與內存負擔。因此,在信息飛速增長的商業社會,它允許數據倉庫從基礎開始擴展,從很小的規模擴展到非常巨大的規模,擁有卓越的可擴展能力,避免了數據爆炸帶來的更新和不便。
總之,正是憑藉以上引領未來的核心科技,Sybase IQ 在保證數據壓縮的目標下,能夠同時提高查詢性能。因此,不論以S/T(即資料庫壓縮比)、P/T,還是從整體SPoT公式來看,Sybase IQ 都擁有更高的綠色數據指標,是「綠色資料庫」的完美體現。
信息飛速膨脹的時代呼喚有效利用資源的綠色科技。綠色資料庫Sybase IQ是對傳統商業智能軟體的挑戰,引領了未來關系型資料庫的發展方向,其低成本、高效能的綠色效應必將促進企業健康持久成長,營造和諧持續發展的綠色信息環境。
9. SYBASE資料庫優化中各參數分別表示什麼如何修改
sp_configure "max memory",800000 ///共享內存1.6G
Sybase 能夠用到的最大物理內存,單位2k,通常配置成昌高祥主機物理內存的70%~80%
sp_configure 「number of user connections」,180 ///180個用戶連接數
通常根據實際並發呼叫來配,一般配置80~200
sp_configure 「lock scheme」, allpages ///使用預設:頁鎖
但有些並發操作多的表需使用行鎖,如cc_telebill表等
sp_configure 「number of locks」,50000 /鎖的數目5萬
可以根據實際應用,一般10000~50000
sp_configure 「max online engines」,2 ///cpu個數為2
單cpu使用預設值,多cpu(4~8個)配成n-1個
number of engines at startup
sp_configure 「number of worker processes」,2 //啟用的工作進程數
單cpu使用預設值,多cpu(4~8個)配成n-1個
sp_configure 「number of open indexes 」,1000 ///打開的索引個數
sp_configure 「number of open objects 」,1000 ///打開的事務個數
sp_configure "user log cache size",4096
日誌緩存通念攜常配成2048或4096
sp_configure "procere cache size",50000 /// 100M
存儲過程緩存(運行存儲過程),單位2k,通常根據需要配置50~200M
sp_cacheconfig "default data cache","1.2G"
設置數據緩存1.2G(所有cache值累加不能超過max memory)
sp_cacheconfig "default data cache", "cache_partition=2"
數據緩存分區(減耐搏少鎖競爭)
重啟sybase服務令所有參數生效
10. sybase資料庫中存儲過程參數中能不能同時是輸入參數也是輸出參數,
可以的,可在參數後加output來實現
如:@par
varchar(20)
output
default
值可以這樣
@test
integer
=
10
default
值只有在不提供該參數值時才有效。