db2存儲過程循環
1. db2存儲過程中循環話語while do的continue有沒有
Orcle中的PL/sql中有以下幾種循環 第一種循環就能完成你的需求
1).無條件進入:
loop
exit when 條件;
循環體;
end loop;
2)有條件進入:
while 條件 loop
循環體;
end loop;
3).循環次數固定:
for 循環變數 in [reverse] 下界..上界 loop
循環體;
end loop;
2. db2的存儲過程的游標cursor怎麼替換
db2的存儲過程的游標cursor替換的解決方法如下:
在sql server 里可以用 臨時表,表變數等 .
可以將復合條件的記錄都插入到臨時表,然後再用 update 等語句對臨時表進行計算.
最後將臨時表的數據插入到正式表.
其實你這個需求 ,是可以不用觸發器的.
多寫幾個 insert ,update 就是了。存儲過程中不是非要用游標啊,他有輸入和輸出參數,只要在過程中做相應的處理就會返回輸出參數。游標的作用主要是為了循環提取數據,游標分隱性游標和顯性游標。 舉個例子(顯性游標): cursor 游標名 is select 語句; while 游標名% found loop end loop;其中的select 語句提取的是一列值,然後每次取一個進行下面的循環。 (隱性游標): for 游標名 in (select 語句)loop end loop;其中的select 語句提取的也是一列值,然後每次取一個進行下面的循環。
3. db2如何創建存儲過程
1.首先連接資料庫
2.發出一下命令:
DB2 -td@ -vf createSQLproc.DB2 createSQLproc.DB2文件中是創建存儲過程的SQL語句; -td 選項讓命令行處理程序使用@作為語句終止字元; -v 選項讓命令處理程序將命令文本回顯到標准輸出; -f 讓命令行處理程序從指定文件讀取命令輸入。
希望能解決您的問題。
4. 如何在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
6、db2
SELECT
TOKEN,
PUBKEY
FROM
FTOTP_TOKENINFO
FETCH
FIRST
10000
ROWS
ONLY
>
要保存文件的絕對全路徑
<--
從
DB2
中導出前一萬條記錄
windows
-
e.g.
db2
SELECT
TOKEN,
PUBKEY
FROM
FTOTP_TOKENINFO
FETCH
FIRST
10000
ROWS
ONLY
>
c:\abc.txt
AIX
-
e.g.
db2
SELECT
TOKEN,
PUBKEY
FROM
FTOTP_TOKENINFO
FETCH
FIRST
10000
ROWS
ONLY
>
c:\abc.txt
<--
注意:不能先進入DB2,執行查詢與導出命令組合
7、db2
drop
procere
存儲過程名
<--
刪除存儲過程
8、db2
drop
database
資料庫名
<--
刪除指定名稱的資料庫
注,如果刪除時提示有應用程序連接到這個資料庫上,可以用如下命令斷開所有應用程序的連接:
db2
force
application
all
<--
斷開所有應用程序的連接
5. 如何執行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
6. DB2 存儲過程
你好,需要指定DYNAMIC RESULT SETS 1,如:
LANGUAGE SQL
SPECIFIC GetBOM
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA
7. 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;
8. db2存儲過程循,求在DB2中存儲過程 循環 有幾種以及循環結構
C是對的,循環隊列是用取余數的方法使得順序存儲空間首尾循環
9. db2存儲過程變數問題
創建SQL存儲過程(CREATE PROCEDURE (SQL) statement )
CREATE PROCEDURE procere-name(IN | OUT | INOUT parameter-name data-type,...) ) ---存儲過程可以設定輸入參數和輸出參數LANGUAGE SQL ----DB2可以用多種語言編寫存儲過程,這里用的是純SQLBEGIN ---開始DECLARE vID smallint; ---定義變數 和Oracle一樣 DECLARE 變數名 變數的數據類型;FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循環 tmp_brnd_cd預先創建好DO ---循環體開始SET vID=BRND_CD; ---對vID賦值,db2可以用set賦值,也可以用values賦值,這里可以寫成values(BRND_CD) into vIDINSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入數據END FOR; --
10. 關於db2資料庫,存儲過程語法的問題,求助
用游標來取這個結果,然後遍歷結果集,判斷後+1即可,太晚了,實在不想寫代碼。嘿嘿,你可以參考一下!