Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

cột động trong oracle sử dụng sql

Tôi nghĩ rằng có thể, mặc dù khá phức tạp, để viết một hàm bảng pipelined trả về cấu trúc biến . Chức năng bảng đường dẫn của bạn sẽ sử dụng giao diện Hộp dữ liệu Oracle và sự kỳ diệu của kiểu AnyDataSet để trả về cấu trúc động trong thời gian chạy. Sau đó, bạn có thể sử dụng nó trong các câu lệnh SQL tiếp theo như thể nó là một bảng, tức là

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

Một số tài liệu tham khảo khác thảo luận về việc triển khai cùng một mẫu

  • Dynamic SQL Pivoting
  • Triển khai Phương pháp Tiếp cận Giao diện phần Hướng dẫn dành cho nhà phát triển hộp mực dữ liệu Oracle
  • Method4. Sau khi tải xuống và cài đặt mã nguồn mở PL / SQL, đây là cách triển khai hoàn chỉnh:

    --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. Truy vấn gốc ở chế độ ngủ đông - cột char (3)

  2. Làm cách nào để tôi có được định nghĩa đầy đủ (sql) về các chế độ xem hệ thống như user_objects?

  3. Làm cách nào để kết nối với Cơ sở dữ liệu Oracle bằng cx_Oracle với tên dịch vụ và thông tin đăng nhập?

  4. chuyển đổi sang PROCEDURE pl / sql

  5. Kiểm tra xem bảng có tồn tại trong cơ sở dữ liệu hay không - PL SQL