sourcecode

Oracle Storeed Procedure에서 두 개의 반환 값을 가져오는 방법

copyscript 2023. 9. 16. 09:50
반응형

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

반응형