Programing

PL / SQL에서 함수와 프로 시저의 차이점은 무엇입니까?

crosscheck 2020. 11. 9. 07:50
반응형

PL / SQL에서 함수와 프로 시저의 차이점은 무엇입니까?


PL / SQL에서 함수와 프로 시저의 차이점은 무엇입니까?


프로 시저에는 반환 값이 없지만 함수에는 있습니다.

예:

CREATE OR REPLACE PROCEDURE my_proc
   (p_name IN VARCHAR2 := 'John') as begin ... end

CREATE OR REPLACE FUNCTION my_func
   (p_name IN VARCHAR2 := 'John') return varchar2 as begin ... end

함수에 매개 변수 목록과 "as"키워드 사이에 return 절이있는 방법에 유의하십시오. 즉, 함수 본문 내부에 다음과 같은 마지막 문이 있어야합니다.

return(my_varchar2_local_variable);

여기서 my_varchar2_local_variable은 해당 함수에서 반환해야하는 varchar2입니다.


함수는 SQL 문에 인라인 될 수 있습니다. 예 :

select foo
      ,fn_bar (foo)
  from foobar

저장 프로 시저로는 수행 할 수 없습니다. 쿼리 옵티마이 저의 아키텍처는이 컨텍스트에서 함수로 수행 할 수있는 작업을 제한하여 순수해야합니다 (즉, 동일한 입력이 항상 동일한 출력을 생성 함). 이는 함수에서 수행 할 수있는 작업을 제한하지만 "순수"로 정의 된 경우 쿼리에서 인라인으로 사용할 수 있습니다.

그렇지 않으면 함수 (반드시 결정적이지 않음)가 변수 또는 결과 집합을 반환 할 수 있습니다. 결과 집합을 반환하는 함수의 경우 쿼리의 다른 선택 항목과 결합 할 수 있습니다. 그러나 옵티마이 저가 어떤 종류의 결과 집합이 반환 될 것인지 예측할 수 없기 때문에 상관 된 하위 쿼리에서 이와 같은 비 결정적 함수를 사용할 수 없습니다 (이는 중지 문제와 같이 계산적으로 다루기 어렵습니다).


저장 프로 시저와 함수는 모두 데이터베이스에있는 명명 된 블록이며 필요할 때마다 실행할 수 있습니다.

주요 차이점은 다음과 같습니다.

  1. 저장 프로시 저는 선택적으로 out 매개 변수를 사용하여 값을 반환 할 수 있지만 값을 반환하지 않고 방식으로 쓸 수도 있습니다. 그러나 함수는 값을 반환해야합니다.

  2. 저장 프로시 저는 SELECT 문에서 사용할 수 없지만 함수는 SELECT 문에서 사용할 수 있습니다.

실제로는 특정 요구 사항 그룹에 대한 저장 프로 시저와 여러 시나리오에서 공유 할 수있는 공통 요구 사항에 대한 기능을 사용합니다. 예를 들어, 두 문자열을 비교하거나 트리밍하거나 마지막 부분을 가져 와서 함수가 있다면 우리가 가지고있는 모든 응용 프로그램에 대해 전역 적으로 사용할 수 있습니다.


다음은 절차와 기능의 주요 차이점입니다.

  1. 프로시 저는 하나 이상의 작업을 수행하는 PL / SQL 블록으로 명명됩니다. 여기서 function은 특정 작업을 수행하는 PL / SQL 블록입니다.
  2. 프로시 저는 함수가 하나의 값을 반환해야하는 경우 값을 반환하거나 반환하지 않을 수 있습니다.
  3. select 문에서 함수를 호출 할 수 있습니다.

아주 간단하게이 의미를 만듭니다.

기능 :

이러한 하위 프로그램은 단일 값을 반환 합니다 . 주로 값을 계산하고 반환하는 데 사용됩니다.

절차 :

이러한 하위 프로그램 은 값을 직접 반환하지 않습니다 . 주로 작업을 수행하는 데 사용됩니다.

예제 프로그램 :

CREATE OR REPLACE PROCEDURE greetings

BEGIN 

dbms_output.put_line('Hello World!');

END ;
/

독립형 절차 실행 :

독립형 프로시 저는 두 가지 방법으로 호출 할 수 있습니다.

EXECUTE키워드 사용 • PL / SQL 블록에서 프로 시저 이름 호출

프로시 저는 다른 PL / SQL 블록에서도 호출 할 수 있습니다.

BEGIN 
greetings;
END;
/

함수:

CREATE OR REPLACE FUNCTION totalEmployees 
RETURN number IS
total number(3) := 0;
BEGIN 
SELECT count(*) into total 
FROM employees;
RETURN total; 
END;
/

Following program calls the function totalCustomers from an another block

DECLARE 
c number(3);
BEGIN 
c := totalEmployees();
dbms_output.put_line('Total no. of Employees: ' || c);
END;
/

In the few words - function returns something. You can use function in SQL query. Procedure is part of code to do something with data but you can not invoke procedure from query, you have to run it in PL/SQL block.


  1. we can call a stored procedure inside stored Procedure,Function within function ,StoredProcedure within function but we can not call function within stored procedure.
  2. we can call function inside select statement.
  3. We can return value from function without passing output parameter as a parameter to the stored procedure.

This is what the difference i found. Please let me know if any .

참고URL : https://stackoverflow.com/questions/771949/what-is-the-difference-between-function-and-procedure-in-pl-sql

반응형