Oacle 사용자 정의 함수(매우 간단명료)

2694 단어 Oacle
문법 설명
create [or replace] function functionName   (parameterName1 mode1 dataType1,  parameterName2 mode2 dataType2,  ...)  
 return returnDataType  
 is/as  
 	--       、    
 begin  
 	function_body  
 	return expression  
end functionName; --        ,      end     。  

--   mode1、mode2      ,dataType         。returnDataType       。  

예 를 들 어 설명 하 다.
1.간단 한 예 를 들다
간단 한 함 수 를 정의 하여 두 수의 합 을 계산 하 다.
create or replace function useEasy(add1 in number, add2 in number) 
  return number 
  is
    FunctionResult number;
  begin
    FunctionResult := add1 + add2;
    return(FunctionResult);
end useEasy;

함수 의 사용 은 계속 아래 를 보 세 요.
2.복잡 한 예 를 들 어 라(복잡 하지만 실 용적 이다)
1⃣️,함수 의 반환 유형 정의
TYPE 형식 atrr 만 들 기type
1、CREATE OR REPLACE TYPE atrr_type  AS OBJECT (
       attrId varchar2(40),
       objType varchar2(40)
);

2、TYPE 타 입 atrrtype 을 표 로 정의 하고 수신 반환 값 으로 사용 합 니 다.
CREATE OR REPLACE TYPE attr_table AS TABLE of atrr_type;

2⃣️,정의 함수(여기 세 가지 방식 을 소개 합 니 다)
1.커서 형식 으로 돌아 가 는 데 한계 가 있다.
create or replace function selectAttrId(objType in VARCHAR2)
  return SYS_REFCURSOR 
  is
    attrId SYS_REFCURSOR;
  begin
    OPEN attrId FOR
      select attr_id, obj_type from CPS_OBJ_ATTR where obj_type = objType;
    return(attrId);
end selectAttrId;

2.결과 집합 을 Table 형식 으로 되 돌려 줍 니 다.
create or replace function resultFunction(objType in VARCHAR2)
  return attr_table 
  is
    attr_row 	atrr_type;        	 		  --         
    attr     	attr_table := attr_table();   --       ,    
  begin
    for thisrow in (select attr_id as attrId, obj_type as objType from CPS_OBJ_ATTR where obj_type = objType) 
    loop
      attr_row := atrr_type(thisrow.attrId, thisrow.objType);
      attr.extend;
      attr(attr.count) := attr_row;
    end loop;
  return(attr);
end resultFunction;

3.파이프 형식 으로 결과 집합 을 되 돌려 줍 니 다.
create or replace function returnPiperesult(objType in VARCHAR2)
  return attr_table pipelined
  is
    attr_row atrr_type;		 --  attr_row      
  begin
    for thisrow in (select attr_id as attrId, obj_type as objType from CPS_OBJ_ATTR where obj_type = objType)
    loop
      attr_row:= atrr_type(thisrow.attrId, thisrow.objType);
      pipe row (attr_row);
    end loop;
  return;
end returnPiperesult;

3⃣️,함수 사용
select resultFunction('turck') from dual;			--       

select * from table(resultFunction('turck'));  	--      table ,    (     type table        )

문장 이 실 용적 이 라 고 생각 하 시 면 오른쪽 위 에 점 을 찍 어 주 시 겠 습 니까?

좋은 웹페이지 즐겨찾기