2011-02-12 16 views
7

Soy nuevo en Oracle db, y me pregunto si puedo averiguar el tipo de datos y el tamaño de datos ... Quiero decir: digamos que tengo la columna "ubicación" de tipo varchar2 (20) en la mesa "productos". ¿Podría escribir una consulta que me devuelva el resultado "varchar2" y "20"?Oracle get column data size

¡Gracias!

Respuesta

19

Echa un vistazo user_tab_columns.

select data_type, data_length 
    from user_tab_columns 
where table_name = 'PRODUCTS' 
    and column_name = 'LOCATION'; 
1
SELECT CHAR_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = <TABLENAME> AND COLUMN_NAME = <COLUMNNAME>;  
+0

Olvidé agregar DATA_TYPE en la cláusula Select. – Ketan

5

¿Es necesario averiguar el tipo y el tamaño de una columna con el fin de entender los datos, o se desea escribir un programa que necesita saber en tiempo de ejecución?

Si solo necesita saberlo para saberlo, al escribir desc tablename en SQLPlus le informaremos acerca de las columnas en la tabla.

Si necesita saber el tipo y tamaño mediante programación, ¿qué idioma está utilizando ... PL/SQL? ¿Java?

Tenga en cuenta que la selección de USER_TAB_COLUMNS solo mostrará las columnas en tablas en su propio esquema. Para otras tablas, tendrá que mirar ALL_TAB_COLUMNS (o DBA_TAB_COLUMNS, si el DBA le ha permitido acceder a él). Tenga en cuenta que su empleador o cliente puede rechazar la compilación de procedimientos o paquetes almacenados en contra.

1

La respuesta a esta pregunta me ha resultado útil. Sin embargo, hay una diferencia importante que debe tenerse en cuenta al tomar data_length cuando el tipo de columna es NVARCAHR2. El data_length devuelto para la columna NVARCHA2 se duplica.

Esto se debe a la codificación de caracteres que se utiliza. Oracle documentation dice:

El número de bytes puede ser de hasta dos veces el tamaño de AL16UTF16 codificación y tres veces el tamaño de la codificación UTF8.

Así, consulta ideal sería la siguiente:

select table_name, column_name, 
data_type, NVL(char_col_decl_length, data_length) 
from user_tab_columns where table_name='T51_NOCOMP'; 
1

hago lo siguiente de sqlplus de Oracle:

SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_NAME = 'YOUR';

espero que funcione para usted también!