Parametrenin veri türünü döndüren bir Oracle işlevi var mı?Oracle Veri Türünü Tanımla
Alternatif olarak, yazdığım bir sorgudaki tüm sütunların veri türünü belirlemenin en kolay yolu nedir?
Parametrenin veri türünü döndüren bir Oracle işlevi var mı?Oracle Veri Türünü Tanımla
Alternatif olarak, yazdığım bir sorgudaki tüm sütunların veri türünü belirlemenin en kolay yolu nedir?
Dump fonksiyon:
bir VARCHAR2 bayt veri türü kodu, uzunluğu ihtiva eden bir değer, ve İfade iç temsil döndürür. İade edilen sonuç her zaman veritabanı karakter setindedir. Her bir koda karşılık gelen veri türü için Tablo 2-1'e bakınız.
bir sorgu yazdıysanız
, bunun dayalı bir görünüm oluşturmak ve sonra veri sözlüğü kolon'durumuna veri türleri ne olacağını anlamak için sorgu yapabilirsiniz:
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
ben tahmin ediyorum, bununla birlikte, çalışma zamanında bunu belirleyen bir tür jenerik yöntem istersiniz. Bu yöntem, DDL'yi içerdiğinden çok kullanışlı olmaz. Bu durumda DBMS_SQL size yardımcı olabilir:
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;
/
Aslında, bir sorgudaki örtülü tür dönüşüm kurallarını doğrulamak istedim. Ancak, bu yaklaşım büyük olasılıkla benim veritabanı tasarımı (ve sonunda veritabanı) olgunlaştıkça yararlı olacaktır. – Steven
Ve düşünmek ... Ben geçici bir tabloya bir sorgunun sonuçlarını dökümü bir PL/SQL programı yazdım, sonra tekrar gelen bilgileri okumak USER_TABLE_COLUMNS. – GameFreak