반응형
Oracle Storeed Procedure에서 두 개의 반환 값을 가져오는 방법
다음과 같이 Oracle SP에서 하나의 반환 값을 얻는 방법을 알고 있습니다.
MyReturn := MY_ORACLE_SP ();
MY_ORACLE_SP2의 반환 값이 1 이상인 경우.어떻게 해야 할까?
-- 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
기술적으로는 프로시저가 아니라 함수입니다. 프로시저에는 반환 값이 없으므로 할당 문의 오른쪽으로 사용할 수 없다는 차이점이 있습니다.
기본적으로 두 가지 옵션이 있습니다.
(1) OUT 매개변수를 사용합니다.이 경우에는 OUT 파라미터가 2개인 절차로 하겠습니다.일반적으로 사람들은 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;
/
반환 값 대신 OUTPUT 파라미터를 사용합니다.
아래 코드를 사용해보세요. 방금 Benoit 사용자의 응답을 수정했습니다.
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
언급URL : https://stackoverflow.com/questions/9484135/how-to-get-two-return-value-from-oracle-stored-procedure
반응형
'sourcecode' 카테고리의 다른 글
PowerShell에 env 변수가 없으면 어떻게 설정합니까? (0) | 2023.09.16 |
---|---|
word press를 mariadb(도커)에 연결할 수 없습니다. (0) | 2023.09.16 |
Relationship between JDBC sessions and Oracle processes (0) | 2023.09.16 |
bower_components를 무시해야 합니까? (0) | 2023.09.16 |
MySQL 시계열은 window 함수를 사용하여 평균 무게를 측정했습니다. (0) | 2023.09.16 |