retourne un VARCHAR2 valeur contenant le type de données de code, longueur en octets, et la représentation interne de expr. Le résultat retourné est toujours dans la base de données du jeu de caractères. Pour le type de données correspondant à chaque code, voir le Tableau 2-1.
Et de penser... j'ai écrit un PL/SQL programme pour vider les résultats d'une requête dans une table temporaire, puis de lire les informations de retour de USER_TABLE_COLUMNS.
Si vous avez écrit une requête, vous pouvez créer une vue basée sur elle et ensuite d'interroger le dictionnaire de données pour voir ce que les colonnes " types de données sont:
createview vw_test asselect1 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
Je suppose, toutefois, vous voulez une sorte de générique de mesure de déterminer ce au moment de l'exécution. Cette méthode ne serait pas très utile, car elle implique DDL. Auquel cas DBMS_SQL peut vous aider à:
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)ISBEGIN
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');ENDIF;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 ISNOTNULL)THEN
LOOP
print_rec(rec_tab(col_num));
col_num := rec_tab.next(col_num);EXITWHEN(col_num ISNULL);END LOOP;ENDIF;
DBMS_SQL.CLOSE_CURSOR(c);END;/
En fait, je voulais juste confirmer le type implicites des règles de conversion dans une requête. Cependant, cette approche sera probablement utile que ma conception de base de données (et éventuellement de la base de données) arrive à échéance.
La Dump Fonction:
OriginalL'auteur borjab
Si vous avez écrit une requête, vous pouvez créer une vue basée sur elle et ensuite d'interroger le dictionnaire de données pour voir ce que les colonnes " types de données sont:
Je suppose, toutefois, vous voulez une sorte de générique de mesure de déterminer ce au moment de l'exécution. Cette méthode ne serait pas très utile, car elle implique DDL. Auquel cas DBMS_SQL peut vous aider à:
À partir de la DBMS_SQL Doc:
OriginalL'auteur Jeffrey Kemp