db2sql存儲過程語法官方權威指南
㈠ DB2 存儲過程調用 存儲過程
1、存儲過程編寫
DROPPROCEDURE"PLName"
@
CREATEPROCEDURE"PLName"(--存儲過程名字
ININ_IDBIGINT,--以下全是輸入參數
ININ_ENTNAMEVARCHAR(200),
ININ_REGNOVARCHAR(50),
ININ_PASSWORDVARCHAR(20),
ININ_LEREPVARCHAR(300),
ININ_CERTYPECHARACTER(1),
ININ_CERNOVARCHAR(50),
ININ_LINKMANVARCHAR(50),
ININ_SEXCHARACTER(1),
ININ_MOBTELVARCHAR(30),
ININ_REQDATETIMESTAMP,
ININ_REMITEMVARCHAR(300),
ININ_STATECHARACTER(1),
ININ_TIMESTAMPTIMESTAMP
)
BEGIN
declareV_RESULTBIGINT;--聲明變數
DELETEFROMTableNameAWHEREID=IN_ID;
SETV_RESULT=NULL;--為變數賦值
--檢查用戶輸入的信息是否合法
selectb.idINTOV_RESULTfromTableNameBb,TableNameCcwhere正常的判斷條件
if(V_RESULTISNOTNULL)then---如果合法,執行下面的insert語句
INSERTINTOTableNameA(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);
endif;
commit;
END
@
2、調用存儲過程
1.拷貝到DB2客戶端工具中直接執行
2.將上面的語句保存為test.db2文件放到任意目錄下(比如D盤根目錄),然後在cmd輸入db2cmd 然後輸入db2 -td@ -vf D: est.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存儲過程
db2 -td@ -vf a.db2
這一句中@的意思是讀取文件中的分隔,每遇到一個@號會將之前的SQL語句做為單獨一段來執行,你的存儲過程中有使用了這個符號,則執行時將創建存儲過程的語句給分拆開了,所以執行會同語法錯誤,你這一段中只需要兩個@號,第一句連接資料庫後用一個,最後用一個,中間的改成「;」號。
connect to toolsdb@
CREATE PROCEDURE testProced(
in in_name varchar(20),
out out_name varchar(20)
)
LANGUAGE SQL
BEGIN
select a into out_name from bb where a1 = in_name;
END@
㈣ 有沒有專門講解db2存儲過程的書籍,求推薦。
沒有見過這樣的書。存儲過程邏輯上只不過是一組SQL語句的集合而已,只要掌握了各種SQL命令,理解連接的原理、子查詢的原理等SQL基本知識,就具備寫存儲過程的基礎了;其次,應該了解所使用的資料庫管理系統的邏輯結構,譬如資料庫的系統表,系統視圖,系統存儲過程,系統函數等,這些都是必須了解的,再深一點就是表、索引等資料庫對象的存儲原理,不同的資料庫產品是不盡相同的;再次,存儲過程經常要處理數據的計算,存儲,傳遞等演算法問題,所以數據結構和演算法也必須有一定的基礎。
當然,存儲過程是資料庫產品擴展的功能,也就是說SQL標准中並沒有對存儲過程的語法做出詳細的規定,所以在不同的資料庫上寫存儲過程的語法差別還是有的。譬如在MSSqlserver上用T-SQL和在Oracle上用PL-SQL寫存儲過程的語法是有一點不同的。但這絕對不是寫存儲過程的難點。寫慣了T-SQL的人,可能用1個星期就習慣了寫PL-SQL,隨便看看參考手冊就行。
綜上所述,應該沒有專門講存儲過程的書。就算真的有,也最好不要看。因為寫存儲過程的能力是一種編程的綜合能力。
㈤ 如何執行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如何創建存儲過程
1.首先連接資料庫
2.發出一下命令:
DB2 -td@ -vf createSQLproc.DB2 createSQLproc.DB2文件中是創建存儲過程的SQL語句; -td 選項讓命令行處理程序使用@作為語句終止字元; -v 選項讓命令處理程序將命令文本回顯到標准輸出; -f 讓命令行處理程序從指定文件讀取命令輸入。
希望能解決您的問題。
㈦ db2 存儲過程的學習
個人認為網上有:《DB2存儲過程開發最佳實踐》和《DB2SQL存儲過程語法官方權威指南》兩本書比較不錯!
具體網址鏈接常被屏蔽,所以就補貼了,網搜一下,多的是
㈧ 如何快速掌握DB2存儲過程
凡事都沒有快速的,想要完全掌握,還是買本書從頭看到尾吧,如果想應付著做點項目,哪很簡單,在db2的安裝目錄.../sqllib/下面有個samples目錄,裡面有個存儲過程的目錄,照著就可以寫了,這個可以看成是最快的辦法吧
㈨ 關於db2資料庫,存儲過程語法的問題,求助
用游標來取這個結果,然後遍歷結果集,判斷後+1即可,太晚了,實在不想寫代碼。嘿嘿,你可以參考一下!
㈩ 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 的搜索函數。