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

Truy xuất cấu trúc bảng với SQL động

Bạn cần quyết định có sử dụng data_length hay không hoặc data_precision dựa trên data_type , bạn có thể thực hiện với biểu thức chữ hoa chữ thường:

select listagg(column_name ||','|| data_type ||','||
  case 
    when data_type in ('VARCHAR2', 'NVARCHAR2', 'CHAR', 'RAW')
      then to_char(data_length)
    when data_type = 'NUMBER'
        and (data_precision is not null or data_scale is not null)
      then data_precision || case
        when data_scale > 0 then '.' || data_scale
      end
    end, ',') within group (order by column_id)
from all_tab_columns
where table_name = 'MYTABLENAME'
and owner = user -- if it is always current user, use user_tab_columns instead
/

Nếu tôi tạo bảng đó dưới dạng:

create table mytablename (col1 varchar2(20), col2 number(2), col3 char(3), col4 date,
  col5 timestamp(3), col6 clob, col7 number(5,2));

thì truy vấn đó tạo ra:

COL1,VARCHAR2,20,COL2,NUMBER,2,COL3,CHAR,3,COL4,DATE,,COL5,TIMESTAMP(3),,COL6,CLOB,,COL7,NUMBER,5.2

Trong ví dụ này, tôi đã biểu thị một số là độ chính xác . quy mô , nhưng bạn có thể không phải lo lắng về cân hoặc có thể muốn xử lý chúng theo cách khác - tùy thuộc vào kết quả sẽ được sử dụng như thế nào. Và tôi đã bao gồm một trường trống cho các loại dữ liệu không có kích thước, ví dụ:CLOB và DATE.

Cũng lưu ý rằng dấu thời gian (và khoảng thời gian) bao gồm độ chính xác trong chính loại dữ liệu, vì vậy timestamp(3) đến trực tiếp từ data_type của cột đó . Dấu thời gian với múi giờ và khoảng thời gian cũng bao gồm dấu cách trong tên loại dữ liệu.

Vì vậy, đây là điểm bắt đầu và bạn có thể mở rộng nó sang các loại dữ liệu khác mà bạn cần xử lý theo những cách cụ thể hoặc (giả sử) chia độ chính xác của dấu thời gian thành một trường được phân tách bằng dấu phẩy riêng biệt.




  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 để lấy kiểu dữ liệu cột trong Oracle với PL-SQL với đặc quyền thấp?

  2. Kết nối Phần mềm IRI với Oracle

  3. Làm cách nào để thực hiện nội suy tuyến tính bằng SQL oracle?

  4. Làm thế nào để tránh lưu trữ thông tin đăng nhập để kết nối với Oracle bằng JDBC?

  5. Ví dụ về Java trong Cơ sở dữ liệu Oracle