2013-10-09 3 views
0

현재 oracle 10g를 사용하여 pl/sql을 학습 중입니다. 특정 혼란이 있습니다 언제 저장 프로 시저를 사용해야하며 언제 기능을 사용해야합니까? 실생활에서 좀 도와주세요. 감사합니다.절차 또는 함수

답변

0
DECLARE 
    l_user_id  VARCHAR2(1); 
    l_received_user VARCHAR2(30); 

    PROCEDURE print_user_name(user_name_in IN VARCHAR2) 
    AS 
    BEGIN 
     DBMS_OUTPUT.PUT_LINE('The user''s name is: ' || INITCAP(user_name_in)); 
    END print_user_name; 

    FUNCTION get_user_name(user_id_in IN VARCHAR2) RETURN VARCHAR2 
    AS 
     l_user_name VARCHAR2(30); 
    BEGIN 
     SELECT 'Amanda' 
     INTO l_user_name 
     FROM dual 
     WHERE dummy = user_id_in; 

     RETURN l_user_name; 
    END get_user_name; 
BEGIN 
    -- excute an action -- 
    print_user_name('John'); 

    l_user_id := 'X'; 

    -- hold action's result in a variable -- 
    l_received_user := get_user_name(l_user_id); 

    -- work with the received result/variable -- 
    DBMS_OUTPUT.PUT_LINE('The received user''s name is: ' || INITCAP(l_received_user)); 

    IF l_received_user = 'John' THEN 
     DBMS_OUTPUT.PUT_LINE('The received user''s name is John'); 
    ELSE 
     DBMS_OUTPUT.PUT_LINE('The received user''s name is not John'); 
    END IF; 
END; 
/* 
The user's name is: John 
The received user's name is: Amanda 
The received user's name is not John 
*/ 
0

차이점은 함수가 무언가를 수행하고 결과 (변수 또는 테이블)를 반환하는 동안 어떤 일을합니다.

2

함수는 실제로 커서와 같은 객체 일 수 있지만 값을 반환합니다. 최적화 피할에게 중복 함수 호출을하는 데 도움이

  1. DETERMINISTIC 옵션 :

    또한 단지 기능은 (11.1 현재) 다음과 같이 정의 할 수 있습니다.
  2. PARALLEL_ENABLED 옵션은 병렬 DML 평가의 슬레이브 세션에서 함수를 안전하게 사용할 수있게합니다.
  3. PIPELINED 옵션은 테이블 함수의 결과를 반복적으로 리턴합니다.
  4. 함수 결과를 PL/SQL 함수 결과 캐시에 저장하는 RESULT_CACHE 옵션.
  5. RESULT_CACHE 절은 함수 결과가 지정된 데이터 원본을 지정합니다.

그래서 여러 값을 반환해야하는 경우 절차를 사용하십시오. 그러나 위의 다섯 가지 기능을 사용할 수 없다는 점에 유의하십시오.

SQL 문에 PL/SQL 서브 프로그램을 포함하려면 일 것입니다. 함수가 필요합니다.

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDBEJGF