Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggunakan Oracle:Bisakah saya menggunakan variabel yang dibuat 'secara dinamis' dalam klausa pivot?

Untuk 12c ke atas, Anda dapat menggunakan DBMS_SQL.RETURN_RESULT dengan membuka REFCURSOR untuk PIVOT dinamis kueri.

Saya telah menghapus (+) yang terkenal itu sintaks untuk left join , selalu gunakan ANSI join sintaks.

DECLARE
    exam_ids   VARCHAR2(255);
    x          SYS_REFCURSOR;
BEGIN
    SELECT
        LISTAGG(''''
                  || exam_id
                  || ''' AS "'
                  || exam_name
                  || '"',',') WITHIN GROUP(
            ORDER BY
                exam_id DESC
        )
    INTO exam_ids
    FROM
        exam;

    OPEN x FOR 'SELECT
        *
               FROM
        (
            SELECT
                u.user_id,
                u.user_name,
                e.exam_id,
                eu.exam_date
            FROM
                users u
                LEFT JOIN exam_user eu ON u.user_id = eu.user_id
                LEFT JOIN exam e ON e.exam_id = eu.exam_id
            ORDER BY
                u.user_id
        )
            PIVOT ( MAX ( exam_date )
                FOR exam_id
                IN ( ' || EXAM_IDS || ' )
            )
    ORDER BY
        1';

    dbms_sql.return_result(x);
END;
/

Untuk 11g, Anda dapat menggunakan variabel bind dan print perintah ( bekerja di sqlplus dan di sql developer/Toad saat dijalankan sebagai skrip (F5))

variable x REFCURSOR  -- bind variable declared.
DECLARE
    ..   -- no need to declare sys_refcursor
BEGIN
     ..

    OPEN :x FOR 'SELECT . --note the change with colon
        *
               FROM
        (
            SELECT
            ..

END;
/


print x




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. perulangan melalui tabel data untuk mendapatkan dua nilai spesifik dari setiap baris

  2. cara mengubah pembatas di sqlplus di oracle 11g

  3. Bagaimana cara memilih catatan dengan nilai maksimum dalam dua kolom?

  4. Memigrasikan Database Oracle dari AWS EC2 ke AWS RDS, Bagian 2

  5. Mengapa rlwrap menggemakan apa yang saya ketik dari keyboard?