현재 oracle 10g를 사용하여 pl/sql을 학습 중입니다. 특정 혼란이 있습니다 언제 저장 프로 시저를 사용해야하며 언제 기능을 사용해야합니까? 실생활에서 좀 도와주세요. 감사합니다.절차 또는 함수
Q
절차 또는 함수
0
A
답변
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
함수는 실제로 커서와 같은 객체 일 수 있지만 값을 반환합니다. 최적화 피할에게 중복 함수 호출을하는 데 도움이
- DETERMINISTIC 옵션 : 또한 단지 기능은 (11.1 현재) 다음과 같이 정의 할 수 있습니다.
- PARALLEL_ENABLED 옵션은 병렬 DML 평가의 슬레이브 세션에서 함수를 안전하게 사용할 수있게합니다.
- PIPELINED 옵션은 테이블 함수의 결과를 반복적으로 리턴합니다.
- 함수 결과를 PL/SQL 함수 결과 캐시에 저장하는 RESULT_CACHE 옵션.
- RESULT_CACHE 절은 함수 결과가 지정된 데이터 원본을 지정합니다.
그래서 여러 값을 반환해야하는 경우 절차를 사용하십시오. 그러나 위의 다섯 가지 기능을 사용할 수 없다는 점에 유의하십시오.
SQL 문에 PL/SQL 서브 프로그램을 포함하려면 일 것입니다. 함수가 필요합니다.
http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/subprograms.htm#CHDBEJGF