oracle存儲過程有返回值
❶ Oracle中 存儲過程,過程和函數有什麼區別和聯系
過程:函數和存儲過程的統稱。
函數:有且僅有一個返回值,可以用於sql語句中。 如:x := get_X(),select get_X() from al,返回值為函數調用的結果。
存儲過程:無返回值。要返回結果,必須聲明為out參數。
如:sp_x(x,y,z),x和y為in類型參數,z為out/in out類型參數。
在oracle中,封裝工具還有自定義類型、包等。包可以封裝過程和函數,包頭類似java中的介面,包體類似JAVA中實現介面的類。
❷ oracle 存儲過程返回結果集怎麼實現用java如何調用這個存儲過程比如表scott下的emp表
1:首先你需要創建一個包,並定義你返回的游標的類型、存儲過程
create or replace package TEST_PKG is
type cur_emp is REF CURSOR;
procere test_proc (emps out cur_emp);
end TEST_PKG;
2:然後你再創建包體
create or replace package body TEST_PKG is
procere test_proc (emps out cur_emp)
as
begin
open emps for select * from emp;
end test_proc;
end TEST_PKG ;
3,通過JAVA調用
cstmt = conn.prepareCall("{call TEST_PKG .test_proc (?)}");
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
cstmt.execute();
//獲得結果集
rs = (ResultSet)cstmt.getObject(4);
while(rs.next()){......}
注意:游標類型需要你在連接未關閉之前進行本地持久化,不然連接關閉了就無法解析了哦^-^,如果還不懂可以聯系我!
❸ oracle存儲過程中調用帶返回參數的存儲過程
1、return返回值類型:
declare v_return_value number;
v_return_value := spname();
dbms_output.putline(v_return_value);
2、out返回
declare v_return_value number;
spname(:v_return_value);
dbms_output.putline(v_return_value);
❹ Oracle 存儲過程和函數的區別
Oracle中函數和存儲過程僅體現在一個地方:
函數有返回值,而存儲過程沒有返回值(當然,兩者都可以通過定義out參數來實現返回值)
其實,Oracle函數和存儲過程差別很小,對比其他資料庫,比如SqlServer:
sqlserver中,函數是不能存在非select的dml語句的,換句話說,函數中,sqlserver是不能出現update、delete、insert等語句的
而Oracle中,是十分自由和寬容的,update、delete、insert等語句都可以出現
但因為Oracle的自由度,會引起其它一些問題:如果使用C#來調用Oracle的函數時,會出現因函數含有update等語句而無法調用,只能換成存儲過程或者在函數外再加一層存儲過程來實現調用。
❺ oracle中的存儲過程如何返回查詢到的多個值
oracle不是不能,而是採用的方法不同罷了。
可以使用一下方法創建返回結果集的調用:
SQL> create or replace package pkg_HelloWorld as
2 -- 定義ref cursor類型
3 type myrctype is ref cursor;
4 --函數申明
5 function getHelloWorld return myrctype;
6 end pkg_HelloWorld;
Package created.
SQL> CREATE OR REPLACE package body pkg_HelloWorld as
2 function getHelloWorld return myrctype
3 IS
4 return_cursor myrctype;
5 BEGIN
6 OPEN return_cursor FOR 'SELECT ''Hello'' AS a, ''World'' AS B FROM al';
7 return return_cursor;
8 END getHelloWorld;
9 end pkg_HelloWorld;
Package body created.
SQL> SELECT pkg_HelloWorld.getHelloWorld FROM al;
GETHELLOWORLD
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
A B
---------- ----------
Hello World