sql >> Database >  >> RDS >> Oracle

dynamische kolommen in orakel met sql

Ik denk dat het mogelijk is, hoewel behoorlijk ingewikkeld, om een ​​gepipelinede tabelfunctie die een variabele structuur retourneert . Uw pijplijntabelfunctie gebruikt de Oracle Data Cartridge-interface en de magie van het AnyDataSet-type om tijdens runtime een dynamische structuur te retourneren. U kunt dat vervolgens in volgende SQL-instructies gebruiken alsof het een tabel is, d.w.z.

SELECT *
  FROM TABLE( your_pipelined_function( p_1, p_2 ));

Nog een paar referenties die dezelfde voorbeeldimplementatie bespreken

  • Dynamische SQL Pivoting
  • De Implementatie van de interface-aanpak sectie van de Oracle Data Cartridge Developer's Guide
  • Methode4. Na het downloaden en installeren van de open source PL/SQL-code, is hier een volledige implementatie:

    --Create sample table.
    create table branch_data as
    select '100' BranchName,'1001010' CustomerNo from dual   UNION ALL 
    select '100' BranchName,'1001011' CustomerNo from dual   UNION ALL 
    select '103' BranchName,'1001012' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001013' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001014' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001015' CustomerNo from dual   UNION ALL 
    select '105' BranchName,'1001016' CustomerNo from dual   UNION ALL 
    select '105' BranchName,'1001017' CustomerNo from dual   UNION ALL 
    select '106' BranchName,'1001018' CustomerNo from dual;
    
    --Create a dynamic pivot in SQL.
    select *
    from table(method4.dynamic_query(
        q'[
            --Create a select statement
            select
                --The SELECT:
                'select'||chr(10)||
                --The column list:
                listagg(
                    replace(q'!sum(case when BranchName = '#BRANCH_NAME#' then 1 else 0 end) "#BRANCH_NAME#"!', '#BRANCH_NAME#', BranchName)
                    , ','||chr(10)) within group (order by BranchName)||chr(10)||
                --The FROM:
                'from branch_data' v_sql
            from
            (
                --Distinct BranchNames.
                select distinct BranchName
                from branch_data
            )
        ]'
    ));
    


  1. Hoe het type Doctrine TEXT te krijgen?

  2. Waarschuwing:mysqli_num_rows() verwacht precies 1 parameter, 2 gegeven | mysql |mysqli

  3. mysql records van twee tabellen in één query tellen?

  4. Hoe kan ik de oorzaak van de Hibernate-uitzondering verhelpen. IllegalArgumentException is opgetreden tijdens het aanroepen van setter?