存儲過程慢db2
❶ DB2資料庫更新數據緩慢,求優化建議
你這樣寫很不好,看起來寫的是一句sql,反而速度慢下來了。首先row_number() over() as rownum毫無必要,這樣來分頁效率不高。然後能不用*就不用*查詢。在大數據量和列很多的情況下,會慢很多。
而且你也說了,更新1W條數據需要半個小時。那麼可以採用存儲過程或者程序來訪問。這樣會快很多,推薦採用存儲過程,110W條數據,就算重建索引等,更新一條應該在200ms一下,一萬條,不會那麼久的。希望能幫助得到你。
你這樣寫sql語句,執行時間太久了,會造成假死現象,這樣很不好。
❷ SQL存儲過程比SQL語句慢,甚至卡死
樓主,你好!這個排版屌爆了%>_<%
USE[HERP_BHYY]
GO
/******對象:StoredProcere[dbo].[sp_]腳本日期:12/03/201308:36:35******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERPROCEDURE[dbo].[sp_]
@ImpDateasDATETIMEASBEGIN
--SETNOCOUNTON;
DECLARE@ST_DATEASDATETIME
DECLARE@ED_DATEASDATETIME
DECLARE@TEMP_DATEDATETIME
IF@ImpDateisnotnull
begin
SET@ST_DATE=LEFT(@ImpDate,10)
SET@ED_DATE=dateadd(day,1,@ST_DATE)
end
deletehisdb2.dbo.his_charge_acc_o
wherecharge_date>=@ST_DATEandcharge_date<@ed_date
insert=""into=""hisdb2.dbo.his_charge_acc_o=""
select=""invoice_type=""from=""
where=""charge_date="">=@ST_DATEandcharge_date<@ED_DATE
end
這樣不是挺好么?
上面的SQL語句貌似漏了什麼東西,你自己看看
❸ DB2中的存儲過程問題
要看死鎖等待的時間,如果沒有超過這個時間是等待,過了這個時間就是出現異常。
❹ shell調用的DB2存儲過程,卡住了,怎麼能停掉
kill -9 進程號
❺ DB2 存儲過程調用 存儲過程
給你一個鏈接,自己學習吧。
個人用過幾個月的DB2,覺得db2的存儲過程 調試最麻煩了。
http://bbs.csdn.net/topics/110040013
❻ db2 存儲過程 異常處理
存儲過程異常的處理:
DECLARE handler-type HANDLER FOR condition handler-action
異常處理器類型(handler-type)有以下幾種:
CONTINUE 在處理器操作完成之後,會繼續執行產生這個異常語句之後的下一條語句。
EXIT 在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
UNDO 在處理器操作執行之前,DB2會回滾存儲過程中執行的SQL操作。在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
異常處理器可以處理基於特定SQLSTATE值的定製異常,或者處理預定義異常的類。預定義的3種異常如下所示:
NOT FOUND 標識導致SQLCODE值為+100或者SQLSATE值為02000的異常。這個異常通常在SELECT沒有返回行的時候出現。
SQLEXCEPTIOIN 標識導致SQLCODE值為負的異常。
SQLWARNING 標識導致警告異常或者導致+100以外的SQLCODE正值的異常。
如果產生了NOT FOUND 或者SQLWARNING異常,並且沒有為這個異常定義異常處理器,那麼就會忽略這個異常,並且將控制流轉向下一個語句。如果產生了SQLEXCEPTION異常,並且沒有為這個異常定義異常處理器,那麼存儲過程就會失敗,並且會將控制流返回調用者。
以下示例聲明了兩個異常處理器。 EXIT處理器會在出現SQLEXCEPTION 或者SQLWARNING異常的時候被調用。EXIT處理器會在終止SQL程序之前,將名為stmt的變數設為"ABORTED",並且將控制流返回給調用者。UNDO處理器會將控制流返回給調用者之前,回滾存儲過程體中已經完成的SQL操作。
清單3:異常處理器示例
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
DECLARE UNDO HANDLER FOR NOT FOUND;
如果預定義異常集不能滿足需求,就可以為特定的SQLSTATE值聲明定製異常,然後再為這個定製異常聲明處理器。語法如下:
清單4:定製異常處理器
DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
處理器可以由單獨的存儲過程語句定義,也可以使用由BEGIN…END塊界定的復合語句定義。注意在執行符合語句的時候,SQLSATE和SQLCODE的值會被改變,如果需要保留異常前的SQLSATE和SQLCODE,就需要在執行復合語句的第一個語句把SQLSATE和SQLCODE賦予本地變數或參數。
通常,會為存儲過程定義一個執行狀態的輸出參數(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --異常的聲明
--異常的處理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:產品實例關聯客戶過程出錯!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;
❼ db2如何優化存儲過程
進入騰訊手機管家首頁--即可看到健康優化功能,其中包括手機加速、流量監控、垃圾清理、電池健康和空間管理功能
進程管理的作用是可以通過進程管理針對手機進行對程序,實現最大化的優化和管理,達到運行更為迅速的效果。當下智能手機的很多軟體是在關閉後,不能徹底結束手機相應進程,我們需要通過手機進入後台關閉掉相應的進程。而如果不關閉的話,很多時候會對我們的手機造成卡機,反應緩慢等一些症狀。
❽ DB2 存儲過程
你好,需要指定DYNAMIC RESULT SETS 1,如:
LANGUAGE SQL
SPECIFIC GetBOM
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA
❾ 如何執行db2存儲過程
1、db2 create database 資料庫名 <-- 創建資料庫
2、db2 connect to 資料庫名 user 用戶名 using 用戶密碼 <-- 連接資料庫
3、db2 -tvf otpdb_v3_db2.sql <-- 為新建資料庫建立表結構
4、db2 -td@ -f 存儲過程文件絕對路徑 <-- 導入存儲過程,無錯誤會提示成功
4、調用存儲過程:
Windows 下:db2 call 存儲過程名(參數1,參數2)
AIX 下:db2 <-- 要先進入DB2,方可調用存儲過程或執行SQL語句
db2=>call 存儲過程名(參數1,參數2)
5、驗證插入數據是否成功
Windows 下:db2 select count(*) from FTOTP_USERINFO
AIX 下:db2 <-- 要先進入DB2,方可調用存儲過程或執行SQL語句
db2=>select count(*) from FTOTP_USERINFO
Windows 下:db2 select count(*) from FTOTP_TOKENINFO
AIX 下:db2 <-- 要先進入DB2,方可調用存儲過程或執行SQL語句
db2=>select count(*) from FTOTP_TOKENINFO
❿ 如何快速掌握DB2存儲過程
做項目很急的話,網上搜存儲過程例子,遇到問題多查官方文檔或者網上搜,網上有DB2的社區,那邊更專業高手也多,如果時間相對寬松,可以選擇性多看看DB2的官方文檔(DB2結構原理和DB2編程的)。