db2存儲過程調用存儲過程
『壹』 db2一個存儲過程調用另一個存儲過程執行沒結果
能具體點么,這樣的描述實在不好回答⋯⋯
『貳』 如何使用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上通過測試。
『叄』 在java中調用db2存儲過程,怎樣給存儲過程傳
JDBC調用存儲過程: CallableStatement
在Java裡面調用存儲過程,寫法那是相當的固定:
Class.forName(....
Connection conn = DriverManager.getConnection(....
/**
*p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號佔位符代替
*其餘地方寫法固定
*/
CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");
/**
*告訴JDBC,這些個參數,哪些是輸出參數,輸出參數的類型用java.sql.Types來指定
*下面的意思是,第3個?和第4個?是輸出參數,類型是INTEGER的
*Types後面具體寫什麼類型,得看你的存儲過程參數怎麼定義的
*/
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
/**
*在我這里第1個?和第2個?是輸入參數,第3個是輸出參數,第4個既輸入又輸出
*下面是設置他們的值,第一個設為3,第二個設為4,第4個設置為5
*沒設第3個,因為它是輸出參數
*/
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);
//執行
cstmt.execute();
//把第3個參數的值當成int類型拿出來
int three = cstmt.getInt(3);
System.out.println(three);
//把第4個參數的值當成int類型拿出來
int four = cstmt.getInt(4);
System.out.println(four);
//用完別忘給人家關了,後開的先關
cstmt.close();
conn.close();
JDBC調用存儲過程,掌握這一個程序足夠了.
以下是上面程序使用的存儲過程的代碼,我用的是Oracle資料庫,不過不論是什麼資料庫,對於你的程序,JDBC這一端寫法都是一樣的.
create or replace procere p
(v_a in number,v_b number,v_ret out number,v_temp in out number)
is
begin
if(v_a > v_b) then
v_ret := v_a;
else
v_ret := v_b;
end if;
v_temp := v_temp + 1;
end;
『肆』 如何執行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 調用存儲過程,報錯:SQL1646N 無法訪問sqllib
幫一下包試試?
db2 terminate
db2 CONNECT TO dbname user USERID using PASSWORD
db2 BIND path\db2schema.bnd BLOCKING ALL GRANT PUBLIC SQLERROR CONTINUE
db2 BIND path\@db2ubind.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
db2 BIND path\@db2cli.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
db2 terminate
where dbname represents the name of a database to which the files should be bound, and where path is the full path name of the directory where the bind files are located, such as INSTHOME\sqllib\bnd where INSTHOME represents the home directory of the DB2 instance. db2ubind.lst and db2cli.lst contain lists of required bind files used by DB2 database procts. Packages that are already bound will return an SQL0719N error. This is expected.
『陸』 JAVA 調用DB2存儲過程獲取結果集
創建procere跟rs有什麼關系,你的調用proceer只是因為你的過程是查詢,所以用一個rs來把結果用一個結果集封裝起來方便對查詢出來的數據進行操作。
你的這句「如果在創建TJ_CX的時候不加RESULT SETS 1,rs為null;」是想表達個啥?
『柒』 db2如何調用帶out參數的存儲過程
declare 出參變數1 ...;
出參變數2...;
.....;
出參變數N...;
begin
過程(入參1,入參2,...,入參N,出參1,出參2,...,出參N);
end;
/
『捌』 db2中存儲過程調用存儲過程的輸出參數怎麼寫
db2 => CREATE PROCEDURE HelloWorld2 ( \
db2 (cont.) => IN vUserName <a href="https://www..com/s?wd=VARCHAR&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">VARCHAR</a>(10), \
db2 (cont.) => OUT vOutValue <a href="https://www..com/s?wd=VARCHAR&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-"target="_blank" class="-highlight">VARCHAR</a>(10), \
db2 (cont.) => INOUT vInOutValue <a href="https://www..com/s?wd=VARCHAR&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">VARCHAR</a>(10)) \
db2 (cont.) => LANGUAGE SQL \
db2 (cont.) => BEGIN \
db2 (cont.) => INSERT INTO test_helloworld \
db2 (cont.) => VALUES('Hello ' || vUserName || vInOutValue); \
db2 (cont.) => SET vOutValue = 'A'; \
db2 (cont.) => SET vInOutValue = 'B'; \
db2 (cont.) => <a href="https://www..com/s?wd=END&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">END</a>
DB20000I SQL 命令成功完成。
db2 => truncate table test_helloworld IMMEDIATE
DB20000I SQL 命令成功完成。
db2 => BEGIN \
db2 (cont.) => DECLARE p_outval VARCHAR(10); \
db2 (cont.) => DECLARE p_inoutval VARCHAR(10); \
db2 (cont.) => SET p_inoutval = '~Hi~'; \
db2 (cont.) => call HelloWorld2('<a href="https://www..com/s?wd=Edward&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">Edward</a>', p_outval, p_inoutval); \
db2 (cont.) => INSERT INTO test_helloworld VALUES('p_outval=' || p_outval); \
db2 (cont.) => INSERT INTO test_helloworld VALUES('p_inoutval=' || p_inoutval)
; \
db2 (cont.) => <a href="https://www..com/s?wd=END&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">END</a>
DB20000I SQL 命令成功完成。
db2 => select * from test_helloworld
<a href="https://www..com/s?wd=DATA&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">DATA</a>
--------------------
Hello <a href="https://www..com/s?wd=Edward&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">Edward</a>~Hi~
p_outval=A
p_inoutval=B
3 條記錄已選擇。
『玖』 java代碼調用db2存儲過程,傳入單引號值
String s1= "aaa";
String s2= "bbb";
String sql="'insert into tab_name (col1,col2) values ('"+s1+"','"+s2+"')'";
System.out.println(sql);
輸出結果為:'insert into tab_name (col1,col2) values ('aaa','bbb')' 是不是這樣的?