PARALLEL_ENABLE AGGREGATE Oracle 사용자 정의 집합 함수 사용

Oracle           

1 . oracle           
   a. static function ODCIAggregateInitialize(sctx IN OUTstring_agg_type )   
               return number
               ,           
   b. member function ODCIAggregateIterate(self IN OUT string_agg_type ,value IN varchar2)
               return number
           ,      ,                    ,     ,     ,   ,   ,       .self    
       ,              
   c. member function ODCIAggregateMerge (self IN string_agg_type,returnValue OUT  varchar2,flags IN number)
             return number
                            ,            ,       (parallel)         .
    d. member function OCDIAggregateTerminate(self IN string_agg_type,returnValue OUT varchar2,flags IN number)
              ,           .



SQL    Functions,Type,   sqlplus  start    SQL     ?  :  

CREATE OR REPLACE FUNCTION strcat(input varchar2 ) RETURN varchar2 PARALLEL_ENABLE AGGREGATE USING strcat_type;

    Functions SQL , sqlplus start , Functions , commit;

, SQL ,sqlplus 。

    ?Google , , Functions , !

CREATE OR REPLACE FUNCTION strcat(input varchar2 ) RETURN varchar2 PARALLEL_ENABLE AGGREGATE USING strcat_type; /

    Functions /, OK ~ sqlplus / Functions Type ! !

, , , 。 , ,

。 Oracle , , , 。 , 。 , permission , , 2 。 。

, 。 user_permission(user_id, permission, permission_type) SQL> select * from user_permission; USER_ID PERMISSION PERMISSIONTYPE ---------- ---------- -------------- 1 31 1 1 7 1 1 63 1 , , , function userid ,

function userid , , Bitand bitand, 。 ,

, 。 , userid , , 。 。 , --Oracle Oracle , sum() count() 。 Oracle built-in , sum,count,avg,min,max , Oracle , ,

,Oracle 。 Oracle , ODCIAggregateInitialize -- ODCIAggregateIterate -- ODCIAggregateMerge -- , , ODCIAggregateTerminate -- , . , permission bitand

create or replace type permission_bitand as object ( v_permission_bitand number, static function ODCIAggregateInitialize(v_self in out permission_bitand ) return number, member function ODCIAggregateIterate(self in out permission_bitand, value in number) return number, member function ODCIAggregateMerge(self in out permission_bitand, v_next in permission_bitand) return number, member function ODCIAggregateTerminate(self in permission_bitand, return_value out number ,v_flags in number) return number )

, 。

create or replace type body permission_bitand is static function ODCIAggregateInitialize(v_self in out permission_bitand) return number is begin v_self := permission_bitand(null); return ODCICONST.Success; end; member function ODCIAggregateIterate(self in out permission_bitand , value in number) return number is begin /* bitand */ if self.v_permission_bitand is null then self.v_permission_bitand := value; else self.v_permission_bitand := bitand(self.v_permission_bitand, value); end if; return ODCICONST.Success; end; /* -- , , */ member function ODCIAggregateMerge(self in out permission_bitand, v_next in permission_bitand) return number is begin /* bitand with next permission_bitand*/ if self.v_permission_bitand is null then self.v_permission_bitand := nvl(v_next.v_permission_bitand, null); else if v_next.v_permission_bitand is not null then self.v_permission_bitand := bitand(self.v_permission_bitand, v_next.v_permission_bitand); end if; end if; return ODCICONST.Success; end; /*-- , */ member function ODCIAggregateTerminate(self in permission_bitand, return_value out number,v_flags in number) return number is begin return_value := self.v_permission_bitand; return ODCICONST.Success; end; end;

ODCIAggregateMerge http://www.kmxlg.com/http://www.yzhbox.com, 。 , , ,Oracle ,

create or replace function permission_bitand_sum(value number) return number parallel_enable aggregate using permission_bitand;

, , grant

SQL>create or replace public synonym permission_bitand_sum for permission_bitand_sum; SQL>grant execute on permission_bitand_sum to public; SQL>grant execute on permission_bitand to public;

SQL> select * from user_permission; USER_ID PERMISSION PERMISSIONTYPE ---------- ---------- -------------- 1 31 1 1 7 1 1 63 1

SQL> select permission_bitand_sum(permission) from user_permission; PERMISSION_BITAND_SUM(PERMISSION) --------------------------------- 7 SQL> insert into user_permission values(1, 0, 1); SQL> select permission_bitand_sum(permission) from user_permission; PERMISSION_BITAND_SUM(PERMISSION) --------------------------------- 0

SQL> update user_permission set permission=null where permission=0; , null , 0, 0, null , , 7 SQL> select permission_bitand_sum(permission) from user_permission; PERMISSION_BITAND_SUM(PERMISSION) --------------------------------- 7 , 。 , 10g wmsys.wm_concat(), , 9i

좋은 웹페이지 즐겨찾기