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

Sử dụng Oracle:Tôi có thể sử dụng biến được tạo 'động' trong mệnh đề xoay không?

Đối với 12c trở lên, bạn có thể sử dụng DBMS_SQL.RETURN_RESULT bằng cách mở REFCURSOR cho PIVOT động truy vấn.

Tôi đã xóa (+) khét tiếng cú pháp cho left join , luôn sử dụng ANSI join cú pháp.

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;
/

Đối với 11g, bạn có thể sử dụng biến liên kết và print lệnh (hoạt động trong sqlplus và trong sql developer / Toad khi chạy dưới dạng tập lệnh (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. Làm cách nào để CHỌN hàng đầu tiên có MAX (Giá trị cột)?

  2. giữ một kết nối với DB hoặc đóng mở theo nhu cầu

  3. Hàm ASIN () trong Oracle

  4. Sự khác biệt giữa VARCHAR2 (10 CHAR) và NVARCHAR2 (10)

  5. Trong Oracle, làm cách nào để xác minh kiểu đối tượng được sử dụng từ hệ thống phân cấp kiểu đối tượng?