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

Truy vấn tab chéo động trong Oracle

Bạn có thể sử dụng con trỏ động để thực thi SQL động được biên dịch từ biến VARCHAR2:

DECLARE 
       w_sql             VARCHAR2 (4000);
       cursor_           INTEGER;
       v_f1    NUMBER (6);
       v_f2    NUMBER (2);
       v_some_value_2_filter_4    NUMBER (2);
       rc      INTEGER         DEFAULT 0;
BEGIN
        -- join as many tables as you need and construct your where clause
        w_sql :='SELECT f1, f2 from TABLE1 t1, TABLE2 t2, ... WHERE t1.f1 =' || v_some_value_2_filter_4 ; 

       -- Open your cursor
       cursor_ := DBMS_SQL.open_cursor;
       DBMS_SQL.parse (cursor_, w_sql, 1);
       DBMS_SQL.define_column (cursor_, 1, v_f1);
       DBMS_SQL.define_column (cursor_, 2, v_f2);
      -- execute your SQL
       rc := DBMS_SQL.EXECUTE (cursor_);

       WHILE DBMS_SQL.fetch_rows (cursor_) > 0
       LOOP
          -- get values from record columns
          DBMS_SQL.COLUMN_VALUE (cursor_, 1, v_f1);
          DBMS_SQL.COLUMN_VALUE (cursor_, 2, v_f2);

          -- do what you need with v_f1 and v_f2 variables

       END LOOP;

END;

Hoặc bạn có thể sử dụng thực thi ngay lập tức , dễ triển khai hơn nếu bạn chỉ cần kiểm tra một giá trị hoặc thực thi và chèn / cập nhật / xóa truy vấn

    w_sql :='select f1 from table where f1 = :variable';
    execute immediate w_sql into v_f1 using 'valor1'

Dưới đây là thông tin thêm về con trỏ động: http:// docs. oracle.com/cd/B10500_01/appdev.920/a96590/adg09dyn.htm




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm bảng nơi thống kê bị khóa

  2. Chạy Oracle Forms độc lập mà không cần trình duyệt

  3. Cách sửa lỗi 'Phương pháp' get_Info 'trong kiểu' Oracle.EntityFrameworkCore không có triển khai. '

  4. Có chức năng nào trong oracle tương tự như group_concat trong mysql không?

  5. SQL thực sự đơn giản Không phải là biểu thức GROUP BY - Oracle