[轉貼於菜鳥之Oracle & Java]在sqlplus中呼叫函式和儲存過程

newdayhope發表於2004-12-31
發表人:cedar_1982 | 發表時間: 2004年十二月31日, 02:09

//執行函式
set serveroutput on
declare
outstr varchar2(110);
begin
outstr := fun_test();
dbms_output.put_line(outstr);
end;
=====================================
//執行儲存過程
set serveroutput on
declare
test varchar2(100);
begin
pro_test(test);
dbms_output.put_line(test);
end;

[轉]oracle儲存過程返回記錄集

發表人:cedar_1982 | 發表時間: 2004年十二月27日, 12:34

//=============================================
// 定義包、及儲存過程
// 請注意遊標變數的宣告和使用的方法
// 這裡的遊標是輸出(out)引數
//=============================================
create or replace package audit is

-- Public type declarations, cursor variable
type outList is ref cursor;

PROCEDURE sp_audit_GetTaxpayerList(organize in varchar2, taxpayerList out outList);

end audit;

create or replace package body audit is
-- taxpayerList is cursor variable
PROCEDURE sp_audit_GetTaxpayerList(organize in varchar2, taxpayerList out outList)
is
begin
OPEN taxpayerList
FOR
select
strName , strTelephone
from "TB_PERSONINFO" a
WHERE a.organize = organize ;

end;

end audit;

//=============================================
// 下面是java 原始碼,從oracle儲存過程讀取記錄集
// 注意一定要用oracle的jdbc API ( 可以從oracle網站下載 )
//=============================================
try
{
Connection conn = null;
ResultSet rs = null;

Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:ora","net7b.com","net7b");

oracle.jdbc.OracleCallableStatement stmt = (oracle.jdbc.OracleCallableStatement)conn.prepareCall("{call
audit.sp_audit_GetTaxpayerList(?, ?)}");
stmt.setString( 1, "23201020100");
stmt.registerOutParameter( 2, oracle.jdbc.OracleTypes.CURSOR );
stmt.execute();
rs = stmt.getCursor( 2 );
for (int i = 0; rs.next();)
{
System.out.println(" ----["+ i +"]name:" + rs.getString(1) + "telephone:" + rs.getString(2));
}
}
catch (Exception ex)
{
ex.printStackTrace();
}


這個是用遊標變數作為輸入(in)引數的例子一部分。我不必廢話,相信大家可以自己試著編寫這樣
的一個例子了。

PROCEDURE open_cv (generic_cv IN OUT GenericCurTyp,choice NUMBER) IS
BEGIN
IF choice = 1 THEN
OPEN generic_cv FOR SELECT * FROM emp;
ELSIF choice = 2 THEN
OPEN generic_cv FOR SELECT * FROM dept;
ELSIF choice = 3 THEN
OPEN generic_cv FOR SELECT * FROM salgrade;
END IF;
...
END;

建立一個簡單的JAVA儲存過程

發表人:cedar_1982 | 發表時間: 2004年十二月25日, 14:32

在網上找了一位大蝦的文章,照著把作了下來,也把它寫下來,省的忘了^_^


環境:
1、作業系統:Windows 2000 Server
2、數 據 庫:Oracle 9i
3、安裝路徑:D:ORACLE

實現方法:
1、在D:底下建立一個簡單的Hello.java檔案
public class Hello{
public static void main (String args[])
{
System.out.println("Hello!just a test!");
}
}
2、javac編譯:
javac Hello.java
3、檢視結果:
-java Hello
Hello!just a test!
4、連線資料庫,給scott賦create and directory 許可權
conn / as sysdba;
grant create any directory to scott;
5、用scott登入
conn scott/tiger@oradb;
create or replace directory test_dir as 'D:';
create or replace java class using bfile(test_dir,'Hello.class');
6、檢視是否存在
-select object_name,object_type from user_objects;
7、建立
create or replace procedure java_test as language java name 'Hello.main(java.lang.String[])';
8、設定sql/plus環境
set serveroutput on size 5000
call dbms_java.set_output(5000);
9、執行:
execute java_test;
顯示:
Hello!just a test!
一個簡單的java儲存過程建立

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/181629/viewspace-785927/,如需轉載,請註明出處,否則將追究法律責任。

相關文章