當前位置:首頁 » 存儲配置 » db2存儲過程遞歸

db2存儲過程遞歸

發布時間: 2023-05-18 19:09:34

Ⅰ db2存儲過程中接收其他存儲過程出參

1、咐神存儲過程編寫
DROP PROCEDURE "PLName"
@
CREATE PROCEDURE "PLName"(--存儲過程名字
IN IN_ID BIGINT , --以下全是輸入參數
IN IN_ENTNAME VARCHAR(200) ,
IN IN_REGNO VARCHAR(50),
IN IN_PASSWORD VARCHAR(20),
IN IN_LEREP VARCHAR(300),
IN IN_CERTYPE CHARACTER(1),
IN IN_CERNO VARCHAR(50),
IN IN_LINKMAN VARCHAR(50),
IN IN_SEX CHARACTER(1),
IN IN_MOBTEL VARCHAR(30),
IN IN_REQDATE TIMESTAMP,
IN IN_REMITEM VARCHAR(300),
IN IN_STATE CHARACTER(1),
IN IN_TIMESTAMP TIMESTAMP
)
BEGIN

declare V_RESULT BIGINT; --聲明變數
DELETE FROM TableNameA WHERE ID = IN_ID;
SET V_RESULT = NULL; --為變數賦值
--檢查用戶輸羨裂入的信息是否合法
select b.id INTO V_RESULT from TableNameB b,TableNameC c where 正常的判斷條件
if(V_RESULT IS NOT NULL) then ---如果合法,執行下面的insert語句
INSERT INTO TableNameA(ID,ENTNAME,REGNO,PASSWORD,LEREP,CERTYPE,CERNO,LINKMAN,SEX,MOBTEL,REQDATE,REMITEM,STATE,TIMESTAMP)
VALUES(IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP);
end if;
commit;
END
@
2、調用存儲過程

1.拷貝到DB2客戶端工具中直接執行
2.將上面的語句保兄簡閉存為test.db2文件放到任意目錄下(比如D盤根目錄),然後在cmd輸入db2cmd 然後輸入db2 -td@ -vf D:\test.db2即可
3.直接寫sql
call PLName(存儲過程名字) (IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP對應的值)

Ⅱ DB2存儲過程中一些參數的明細解說

IN 是輸入參數
OUT 是輸出參數

建議困或你看一看sqllib/samples/sqlproc目錄下的 .db2文件,這裡面全是一些例子,把這些看一遍你應該就明白了,不是很復雜

上面說的.db2文件也可能在下面這個目錄中,根據版本或系統不明尺禪同可激塵能不一樣
SQLLIB\samples\sqlpl

Ⅲ 如何執行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 存儲過程 異常處理

存儲過程異常的處理:
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存儲過程變數問題

創建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; --

Ⅵ Perl 如何處理 返回多個游標的DB2存儲過程

一個游標(cursor)可以被看作指向結果集(a set of rows)中一行的指針(pointer)。游標每個時間點只能指向一行,但是可以根據需要指向結果集中其他的行。
例如:SELECT * FROM employees WHERE sex='M'會返回所有性別為男的雇員,在初始的時候,游標被放置在結果集中第一行的前面。使游標指向第一行,要執行FETCH。當游標指向結果集中一行的時候,可以對這行數據進行加工處理,要想得到下一行數據,要繼續執行FETCH。FETCH操作可以重復執行,直到完成結果集中的所有行

在存儲過程中使用游標,有如下幾個步驟:
聲明游標、打開游標、根據需要一次一行,講游標指向的數據取到本地變數(local variables)中、結束時關閉游標

聲明游標:
>>-DECLARE--cursor-name--CURSOR----+------------+--------->
'-WITH HOLD--'
>-----+--------------------------------+--------------------->
| .-TO CALLER--. |
'-WITH RETURN--+------------+--'
'-TO CLIENT--'
>----FOR--+-select-statement-+----------------------------><
'-statement-name---'
WITH RETURN子句用於將游標所定義的結果集傳遞給另一個存儲過程或者應用(an application)
如果select語句中包含CURRENT DATE, CURRENT TIME和CURRENT TIMESTAMP,所有的FETCH語句都會返回相同的日期、時間、時間戳值,因為這些特定寄存器是在打開游標(OPEN CURSOR)的時候進行檢查的

Ⅶ 用Dbvisualizer工具寫DB2存儲過程

dbvisualizer中執行命令是在:Help=》License Key。具體如下:
第一步:把下載的dbvis.puk文件,替換掉安裝目錄冊返「D:\Program Files\DbVisualizer-6.0.12\lib」下dbvis.jar裡面的這個文件dbvis.puk。
第二步:然後打開軟體,選擇Help=》License Key ,然後下載導入dbvis.license文件。
第三步:重起一下軟體就可悉鏈以了。
DbVisualizer是一個完全基於JDBC的州陸飢跨平台資料庫管理工具,內置SQL語句編輯器,凡是具有JDBC資料庫介面的資料庫都可以管理,已經在Oracle, Sybase, DB2, MySQL, InstantDB, Cloudcape, HyperSonic ,Mimer SQL上通過測試。

Ⅷ DB2資料庫查詢語句中遞歸相加

不知道你那個查詢, 能不能加一個 Row_Number 的處理。

或者有什麼 遞增的數值在裡面的。

如果有的話, 可以參考下面這種處理方式:

測試數據.
CREATETABLEtemp(
yearINT,
salaryINT
);
INSERTINTOtempVALUES(2000,1000);
INSERTINTOtempVALUES(2001,2000);
INSERTINTOtempVALUES(2002,3000);
INSERTINTOtempVALUES(2003,4000);

預期要求結果:
yearsalary
20001000
20013000
20026000
200310000

SELECT
year,
(SELECTSUM(salary)FROMtempt2WHEREt2.year<=temp.year)ASsalary
FROM
temp;

yearsalary
20001000
20013000
20026000
200310000

Ⅸ DB2中建立存儲過程的詳細參數和語法

DECLARE CHOICE2 CURSOR WITH RETURN TO CALLER FOR --聲明游標 CHOICE2
SELECT COMPANYID,DEPTID,SEQID,SUBMITTIME,SUBMITDATE,
B.GRADEDESC HYEAR,PRODUCTID,PRODUCTCODE,PRODUCTDESC,
A.GRADEID,PRICE,SFZDPY,LQUANT,MQUANT,MCQUANT,LCQUANT,
UQUANT,OTHQUANT1,OTHQUANT2,OTHQUANT3,OTHQUANT4,EMP1,EMP2,STATUS,A.REMARK,
DECIMAL(ABS(MCQUANT-MQUANT)/NULLIF(MQUANT,0)*100,10,2)TAG
FROM T_SUPPLY_PPB_HY A
LEFT JOIN T_SUPPLY_GRADATION B ON A.GRADEID=B.GRADEID
WHERE HYEAR=TO_CHAR(P_NF)||P_BN
ORDER BY B.GRADEID,PRODUCTCODE,A.PRICE;

--1.DECIMAL(P,S)十進制數,小數點位置由數字的精度(P)和小數位(S)確定。
-- 精度是數字的總位數,必須小於32。小數位是小數部分數字的位數且總是小於或等於精度值。
-- 如果未指定精度和小數位,則十進制值的預設精度為5,預設小數位為0。
--2.語法:NULLIF ( expression , expression )
-- expression:(常量、列名、函數、子查詢或算術運算符、按位運算符以及字元串運算符的任意組)
-- 如果兩個表達式不相等,NULLIF 返回第一個 expression 的值。如果相等,NULLIF 返回第一個 expression 類型的空值。如果兩個表達式相等且結果表達式為 NULL,NULLIF 等價於 CASE 的搜索函數。

Ⅹ 在db2的命令行如何創建存儲過程和函數

1.首先連接資料庫 2.發出一下命令: DB2 -td@ -vf createSQLproc.DB2 createSQLproc.DB2文件中是創建存儲過程的SQL語句; -td 選項讓命令行處理程序使用@作為語句終止字元; -v 選項讓命令處理程序將命令文本回顯到標准輸出; -f 讓命令行處理程序從指定文件讀取命令輸入。

熱點內容
大唐無雙冒險腳本 發布:2025-02-08 11:08:36 瀏覽:759
什麼安卓手機可以用個兩三年 發布:2025-02-08 11:02:37 瀏覽:966
安卓收銀軟體哪個好用 發布:2025-02-08 11:01:44 瀏覽:171
實現秘聞存儲的方法 發布:2025-02-08 10:23:33 瀏覽:168
怎麼在微信發文件夾 發布:2025-02-08 10:09:45 瀏覽:795
cryengine源碼 發布:2025-02-08 09:50:58 瀏覽:394
aardio可以反編譯嗎 發布:2025-02-08 09:50:53 瀏覽:484
公司營業執照密碼是什麼 發布:2025-02-08 09:47:56 瀏覽:855
體驗腳本 發布:2025-02-08 09:46:15 瀏覽:691
醫學生需要什麼配置的筆記本 發布:2025-02-08 09:45:34 瀏覽:772