我知道如何從Oracle SP在Oracle中得到一個返回值如下如何從Oracle獲得兩個返回值存儲過程
MyReturn := MY_ORACLE_SP();
如果MY_ORACLE_SP2的返回值是多個。我能怎麼做?
我知道如何從Oracle SP在Oracle中得到一個返回值如下如何從Oracle獲得兩個返回值存儲過程
MyReturn := MY_ORACLE_SP();
如果MY_ORACLE_SP2的返回值是多個。我能怎麼做?
-- IN arguments : you get them. You can modify them locally but caller won't see it
-- IN OUT arguments: initialized by caller, already have a value, you can modify them and the caller will see it
-- OUT arguments: they're reinitialized by the procedure, the caller will see the final value.
CREATE PROCEDURE f (p IN NUMBER, x IN OUT NUMBER, y OUT NUMBER)
IS
BEGIN
x:=x * p;
y:=4 * p;
END;
/
SET SERVEROUTPUT ON
declare
foo number := 30;
bar number := 0;
begin
f(5,foo,bar);
dbms_output.put_line(foo || ' ' || bar);
end;
/
輸出:150 20
使用OUTPUT參數而不是返回值。
你有什麼存在技術上不是程序,但功能 - 不同的是一個過程沒有返回值,不能使用作爲賦值語句的右邊。
基本上有兩種選擇:
(1)使用OUT參數。在這種情況下,我將使它具有兩個OUT參數的過程。通常人們不喜歡也具有OUT參數的函數,因爲它違反了通常的期望。 @ Benoit的答案顯示了這種方法。
(2)定義一個包含多個值的類型,並將其用作函數的返回類型。例如:
CREATE TYPE two_values AS object (
A NUMBER,
b number
);
/
CREATE FUNCTION get_two_values RETURN two_values AS
BEGIN
RETURN two_values(2,4);
END;
/
嘗試下面的代碼我只是修改從用戶貝努瓦
ab=`sqlplus -s system/password << eof
SET SERVEROUTPUT ON
set pagesize 0;
set heading off;
set feedback off;
set linesize 5000;
set trimspool on;
declare
foo number := 30;
bar number := 0;
begin
f(5,foo,bar);
dbms_output.put_line(foo || ' ' || bar);
end;
/
eof`
echo $ab
「多個」 _horizontally_(即多個字段)或_vertically_(多行)的反應? – 2012-02-28 14:58:13
函數只能返回一個對象。但它可以是複雜類型('TABLE of some_type')。但也許你想使用程序? – Benoit 2012-02-28 15:00:13
我的SP會返回兩個值。這就是爲什麼我不知道如何從SP獲得這兩個回報價值。 – ppshein 2012-02-28 15:40:03