• oracle 动态列


    ---create custom object   
    CREATE or replace TYPE unit_type AS OBJECT   
          ( unit1     VARCHAR2(50)   
           ,unit2     VARCHAR2(50)   
           ,unit3     VARCHAR2(50)   
           ,unit4     VARCHAR2(50)   
          );   
    
    
    ---create table object by type Object   
    CREATE TYPE unit AS TABLE OF unit_type;   
    
    
    ---create table   
    create table t_unit (unitname varchar2(50));   
    
    
    ---insert into data   
    begin  
    insert into t_unit (UNITNAME) values ('a');   
    insert into t_unit (UNITNAME) values ('b');   
    insert into t_unit (UNITNAME) values ('c');   
    insert into t_unit (UNITNAME) values ('d');   
    insert into t_unit (UNITNAME) values ('e');   
    insert into t_unit (UNITNAME) values ('f');   
    insert into t_unit (UNITNAME) values ('g');   
    insert into t_unit (UNITNAME) values ('h');   
    insert into t_unit (UNITNAME) values ('i');   
    insert into t_unit (UNITNAME) values ('j');   
    insert into t_unit (UNITNAME) values ('k');   
    insert into t_unit (UNITNAME) values ('l');   
    insert into t_unit (UNITNAME) values ('m');   
    insert into t_unit (UNITNAME) values ('n');   
    insert into t_unit (UNITNAME) values ('o');   
    insert into t_unit (UNITNAME) values ('p');   
    insert into t_unit (UNITNAME) values ('r');   
    insert into t_unit (UNITNAME) values ('s');   
    insert into t_unit (UNITNAME) values ('t');   
    insert into t_unit (UNITNAME) values ('u');   
    insert into t_unit (UNITNAME) values ('v');   
    insert into t_unit (UNITNAME) values ('w');   
    insert into t_unit (UNITNAME) values ('x');   
    insert into t_unit (UNITNAME) values ('y');   
    insert into t_unit (UNITNAME) values ('z');   
    insert into t_unit (UNITNAME) values ('q');   
    insert into t_unit (UNITNAME) values ('1');   
    insert into t_unit (UNITNAME) values ('2');   
    insert into t_unit (UNITNAME) values ('3');   
    insert into t_unit (UNITNAME) values ('4');   
    commit;   
    end;   
    
    
    
    ---check data   
    select * from t_unit;   
    
    
    ---create pipe function ,  important step   
    create or replace function autolinefeed        
    return unit PIPELINED       
    as     
     temp_str varchar2(32767):='';      
     temp_index number:=0;        
     temp_count number:=0;   
     temp_sum number:=0;   
     temp_unit1 varchar2(50);   
     temp_unit2 varchar2(50);   
     temp_unit3 varchar2(50);   
     temp_unit4 varchar2(50);   
    begin        
         select count(*) into temp_sum from t_unit;   
         if temp_sum<=0 then  
           pipe row(null);   
           return;   
         end if;   
         for v_unit in (select * from t_unit) loop   
           temp_count:=(temp_count+1);   
           if (mod(temp_count,4)=1) then  
             temp_unit1 :=v_unit.unitname;   
           elsif (mod(temp_count,4)=2) then  
             temp_unit2 :=v_unit.unitname;   
           elsif (mod(temp_count,4)=3) then  
             temp_unit3 :=v_unit.unitname;   
           else  
             temp_unit4 :=v_unit.unitname;   
           end if;   
           if (mod(temp_count,4)=0) then  
             pipe row(unit_type(temp_unit1,temp_unit2,temp_unit3,temp_unit4));      
           else  
             if (temp_sum=temp_count) then    
                if (mod(temp_count,4)=1) then  
                  pipe row(unit_type(temp_unit1,'','',''));   
                elsif (mod(temp_count,4)=2) then  
                  pipe row(unit_type(temp_unit1,temp_unit2,'',''));   
                elsif (mod(temp_count,4)=3) then  
                  pipe row(unit_type(temp_unit1,temp_unit2,temp_unit3,''));   
                else  
                  pipe row(unit_type(temp_unit1,temp_unit2,temp_unit3,temp_unit4));     
                end if;   
             end if;   
           end if;   
         end loop;   
         exception      
          when others then     
          pipe row(null);       
    end;    
    
    
    
    select * from table(autolinefeed);
  • 相关阅读:
    SetTransform
    D3DXCreateText
    《高级游戏特性实现》考试样题
    KeyUp
    .FX File
    CMD
    X File Class
    《DirectX游戏设计》考试样题
    ps图片处理效果——很nice哦
    学习篇:来点水货要天天学习!!!
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2947983.html
Copyright © 2020-2023  润新知