Etiquetas:
Vínculo permanente Respuesta de bobymetal el julio 27, 2009 a las 5:28pm mmm ....podrias hacer uso de la tabla all_tab_column... ahi veras como esta construida la tabla deseada....
see ya
Vínculo permanente Respuesta de Ronald Fco. Vargas Quesada el julio 29, 2009 a las 10:58am
Vínculo permanente Respuesta de Ronald Fco. Vargas Quesada el julio 29, 2009 a las 11:00am Buenos días Ivan
El siguiente ejemplo te puede dar una idea de como puedes determinar si una columna es de un tipo de datos específico.
Puedes adaptarlo en un función y que te devuelva el resultado de la evaluación, para una columna específica.
Saludos
Te adjunto la fuente del ejemplo.
Yo lo probé y si funciona.
http://stackoverflow.com/questions/1087161/oracle-identify-data-type
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 t1', 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;
/
create view vw_test as
select 1 an_integer, 'abc' a_string, sysdate a_date from dual;
Bienvenido a
Comunidad Oracle Hispana
© 2012 Creado por Fernando Garcia.