當前位置:首頁 » 服務存儲 » db2存儲過程中變數的使用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

db2存儲過程中變數的使用

發布時間: 2022-05-15 08:13:26

① DB2存儲過程

out_name是輸出參數
聲明一個變數
declare into_name varchar(20);
下面的into操作
select a into into_name from bb where a1= in_name

② 請教下db2 存儲過程 變數聲明位置

是的,你必須在第一次使用前聲明並且賦值,否則就會報錯,很多語言都是這樣的,你在一段java代碼中一樣要在使用前聲明切初始化的。

③ 怎麼在DB2中使用動態的Fetch first N rows only,n是一個變數

fetch first N rows only 是在db2中用來限制查詢結果集的數目,不管是sql還是存儲過程都是一樣的。不過載存儲過程中要這樣做:
open c1;--打開游標
fetch c1 into v_code; --此處是v_code變數,而且知識獲取第一條記錄;若想處理多條記錄要用循環。
close c1;--處理完所有記錄,要記住關閉游標

④ 如何在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
<--
斷開所有應用程序的連接

⑤ 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、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存儲過程如何寫變數為多個值的條件語句

CREATEPROCEDURETestIfElse(
p_aINT,
OUTp_bINT
)
LANGUAGESQL
BEGIN
IFp_a=1ORp_a=2THEN
SETp_b=100;
ELSEIFp_a=3ORp_a=4THEN
SETp_b=200;
ENDIF;
END


這樣的效果么?

⑧ DB2的SQL腳本如何定義變數,並賦值使用執行成功有重賞哦,謝謝

用存儲過程啊,給你個簡單的例子
CREATE PROCEDURE SPCARDTRACE
(
IN I_CARDNO VARCHAR(10)
)

-- 存儲過程功能 :
-- 創建人:
-- 創建日期:
-- 參數說明:
-- 01. : I_CARDNO 卡號
-- 02. :
-- 03. :

LANGUAGE SQL
SPECIFIC SPCARDTRACE
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA

BEGIN
DECLARE V_CARDNO VARCHAR(10); --卡號
DECLARE V_EMPNAME VARCHAR(16); --持卡人
DECLARE V_CARDBALANCE DECIMAL(8,2); --卡余額
DECLARE V_HAPPENDATE INT;--統計時間
DECLARE V_MINTIME TIMESTAMP; --最小時間
DECLARE V_MAXTIME TIMESTAMP; --最大時間
DECLARE V_MINMONTH INT ;
DECLARE V_MAXMONTH INT ;
DECLARE V_ISSUECARDDATE TIMESTAMP; --發卡時間
DECLARE V_SUBSIDYMONEY DECIMAL(8,2);--補貼金額
DECLARE V_CONSUMEMONEY DECIMAL(8,2);--沖值金額
DECLARE V_PUTMONEY DECIMAL(8,2);--沖值金額
DECLARE V_OUTMONEY DECIMAL(8,2);--退款金額
DECLARE V_CHANGEMONEY DECIMAL(8,2);--改卡差額
DECLARE V_STRSQL VARCHAR(1000); --SQL
DECLARE CS CURSOR WITH RETURN TO CALLER FOR RETURNTABLE;

INSERT INTO TBCARDTRACE ( CARDNO,EMPNAME,CARDBALANCE,ISSUECARDDATE ,HAPPENDATE,
SUBSIDYMONEY,PUTMONEY,OUTMONEY ,CONSUMEMONEY,CHANGEMONEY )
VALUES (V_CARDNO,V_EMPNAME,V_CARDBALANCE,V_ISSUECARDDATE,V_HAPPENDATE,
V_SUBSIDYMONEY,V_PUTMONEY,V_OUTMONEY,V_CONSUMEMONEY,V_CHANGEMONEY);

END

⑨ db2存儲過程裡面可以用like么

  • db2存儲過程裡面可以用like

  • DB2中的like的使用是有限制的,它不允許跟在它後面的是一個變數或者是欄位,目前比較多的是:like '%測試%'這樣.

因此,在函數或者是存儲過程中,就不能通過窗體一個參數給like來組成動態的條件。

如果真要在函數或者是存儲過程中,去搜索某個欄位是否擁有某個字元串在裡面,可以使用locate。

下面是locate的用法:

locate(arg1,arg2,<pos>):在arg2中查找arg1第一次出現的位置,指定pos,則從arg2的pos處開始找arg1第一次出現的位置。

下面是用該方法時的一個例子:

CREATE FUNCTION GDZJ.GETNOPASS

(ITEMNAME VARCHAR(100),

REPORTTYPE INTEGER,

RESULTID INTEGER

)

RETURNS INTEGER

SPECIFIC GDZJ.SQL091102183311900

LANGUAGE SQL

NOT DETERMINISTIC

READS SQL DATA

STATIC DISPATCH

CALLED ON NULL INPUT

EXTERNAL ACTION

INHERIT SPECIAL REGISTERS

begin atomic

--返回值0:沒有該檢驗項目。1:有檢驗項目,但全部合格。2:有檢驗項,但有一個不合格。(只要有一個不合格就判其不合格)

DECLARE IResult INTEGER;

DECLARE ICount INTEGER;

set IResult=0;

--REPORTTYPE:1:外單位、0:非外單位

if REPORTTYPE=1 then

set ICount=(

select count(1) from DETECT_END_INFO where

CHECK_OUT_UNIT_INFO_ID=RESULTID and locate(ITEMNAME,PROJECT_NAME)>0

end;

⑩ 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; --