Có một hàm Oracle để trả về kiểu dữ liệu của tham số không?Oracle Xác định Loại Dữ liệu
Cách khác, cách dễ nhất để xác định kiểu dữ liệu của tất cả các cột trong truy vấn mà tôi đã viết là gì?
Có một hàm Oracle để trả về kiểu dữ liệu của tham số không?Oracle Xác định Loại Dữ liệu
Cách khác, cách dễ nhất để xác định kiểu dữ liệu của tất cả các cột trong truy vấn mà tôi đã viết là gì?
Các Dump Chức năng:
trả về một giá trị VARCHAR2 chứa mã datatype, chiều dài tính bằng byte, và đại diện bên trong của expr. Kết quả trả về luôn nằm trong bộ ký tự cơ sở dữ liệu. Đối với kiểu dữ liệu tương ứng với từng mã, xem Bảng 2-1.
Nếu bạn đã viết một truy vấn, bạn có thể tạo ra một cái nhìn dựa vào nó và sau đó truy vấn dữ liệu từ điển để xem những gì các cột kiểu dữ liệu là:
create view vw_test as
select 1 an_integer,
'abc' a_string,
sysdate a_date
from dual;
desc vw_test;
Name Null Type
----------- -------- ------------------
AN_INTEGER NUMBER
A_STRING CHAR(3)
A_DATE DATE
Tôi đoán, tuy nhiên, bạn muốn một số cách thức chung để xác định điều này khi chạy. Phương pháp này sẽ không hữu ích vì nó liên quan đến DDL. Trong trường hợp này DBMS_SQL có thể giúp bạn:
DECLARE
c NUMBER;
d NUMBER;
col_cnt INTEGER;
f BOOLEAN;
rec_tab DBMS_SQL.DESC_TAB;
col_num NUMBER;
PROCEDURE print_rec(rec in DBMS_SQL.DESC_REC) IS
BEGIN
DBMS_OUTPUT.NEW_LINE;
DBMS_OUTPUT.PUT_LINE('col_type = '
|| rec.col_type);
DBMS_OUTPUT.PUT_LINE('col_maxlen = '
|| rec.col_max_len);
DBMS_OUTPUT.PUT_LINE('col_name = '
|| rec.col_name);
DBMS_OUTPUT.PUT_LINE('col_name_len = '
|| rec.col_name_len);
DBMS_OUTPUT.PUT_LINE('col_schema_name = '
|| rec.col_schema_name);
DBMS_OUTPUT.PUT_LINE('col_schema_name_len = '
|| rec.col_schema_name_len);
DBMS_OUTPUT.PUT_LINE('col_precision = '
|| rec.col_precision);
DBMS_OUTPUT.PUT_LINE('col_scale = '
|| rec.col_scale);
DBMS_OUTPUT.PUT('col_null_ok = ');
IF (rec.col_null_ok) THEN
DBMS_OUTPUT.PUT_LINE('true');
ELSE
DBMS_OUTPUT.PUT_LINE('false');
END IF;
END;
BEGIN
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, 'SELECT * FROM scott.bonus', DBMS_SQL.NATIVE);
d := DBMS_SQL.EXECUTE(c);
DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
/*
* Following loop could simply be for j in 1..col_cnt loop.
* Here we are simply illustrating some of the PL/SQL table
* features.
*/
col_num := rec_tab.first;
IF (col_num IS NOT NULL) THEN
LOOP
print_rec(rec_tab(col_num));
col_num := rec_tab.next(col_num);
EXIT WHEN (col_num IS NULL);
END LOOP;
END IF;
DBMS_SQL.CLOSE_CURSOR(c);
END;
/
Thực ra, tôi chỉ muốn xác nhận quy tắc chuyển đổi loại tiềm ẩn trong truy vấn. Tuy nhiên, cách tiếp cận này rất có thể sẽ hữu ích khi thiết kế cơ sở dữ liệu của tôi (và cuối cùng là cơ sở dữ liệu) đáo hạn. – Steven
Và suy nghĩ ... Tôi đã viết một chương trình PL/SQL để đổ các kết quả của một truy vấn vào một bảng tạm thời, sau đó đọc các thông tin trở lại từ USER_TABLE_COLUMNS. – GameFreak