Oracle
 sql >> база данни >  >> RDS >> Oracle

динамични колони в oracle с помощта на sql

Мисля, че е възможно, макар и доста сложно, да се напише конвейерна таблична функция, която връща променлива структура . Вашата функция за конвейерна таблица ще използва интерфейса на Oracle Data Cartridge и магията на типа AnyDataSet, за да върне динамична структура по време на изпълнение. След това можете да го използвате в следващите SQL изрази, сякаш е таблица, т.е.

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

Още няколко препратки, които обсъждат същата примерна реализация

  • Динамично SQL Pivoting
  • Внедряване на интерфейсния подход раздел на ръководството за разработчици на Oracle Data Cartridge
  • Метод4. След като изтеглите и инсталирате PL/SQL кода с отворен код, ето пълно изпълнение:

    --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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разрешим java.lang.ClassNotFoundException:oracle.jdbc.driver.OracleDriver по време на изпълнение?

  2. Как да сравня две CLOB стойности в Oracle

  3. Намерен заключен обект на oracle.jdbc.driver.T4CConnection

  4. ЗАРЕЖДАНЕ НА ДАННИ INFILE еквивалент в Oracle

  5. Замяна на текст в колона BLOB