vistas una transponer tabla sesiones saber registros quien monitorear modifico ejemplos dinamico developer consultas consultar como comandos columnas 11g oracle plsql ddl privileges

una - ¿Cómo obtengo el tipo de datos de columna en Oracle con PL-SQL con privilegios bajos?



oracle transponer registros columnas (8)

Tengo acceso "de solo lectura" a algunas tablas en una base de datos Oracle. Necesito obtener información de esquema en algunas de las columnas. Me gustaría usar algo análogo a sp_help MS SQL.

Veo la tabla que me interesa enumerar en esta consulta:

SELECT * FROM ALL_TABLES

Cuando ejecuto esta consulta, Oracle me dice "la tabla no se encuentra en el esquema", y sí, los parámetros son correctos.

SELECT DBMS_METADATA.GET_DDL(''TABLE'', ''ITEM_COMMIT_AGG'', ''INTAMPS'') AS DDL FROM DUAL;

Después de usar mi traductor universal Oracle 9000, he supuesto que esto no funciona porque no tengo suficientes privilegios. Dadas mis limitaciones, ¿cómo puedo obtener el tipo de datos y la longitud de datos de una columna en una tabla a la que he leído acceso con una instrucción PL-SQL?


La mejor solución que he encontrado para este caso es

select column_name, data_type|| case when data_precision is not null and nvl(data_scale,0)>0 then ''(''||data_precision||'',''||data_scale||'')'' when data_precision is not null and nvl(data_scale,0)=0 then ''(''||data_precision||'')'' when data_precision is null and data_scale is not null then ''(*,''||data_scale||'')'' when char_length>0 then ''(''||char_length|| case char_used when ''B'' then '' Byte'' when ''C'' then '' Char'' else null end||'')'' end||decode(nullable, ''N'', '' NOT NULL'') from user_tab_columns where table_name = ''TABLE_NAME'' and column_name = ''COLUMN_NAME'';

@Aaron Stainback, ¡gracias por la corrección!


Manera rápida y sucia (por ejemplo, para ver cómo se almacenan los datos en el oráculo)

SQL> select dump(dummy) dump_dummy, dummy , dump(10) dump_ten from dual DUMP_DUMMY DUMMY DUMP_TEN ---------------- ----- -------------------- Typ=1 Len=1: 88 X Typ=2 Len=2: 193,11 1 row selected.

mostrará que la columna ficticia en la tabla sys.dual tiene typ = 1 (varchar2), mientras que 10 es Typ = 2 (número).


Nota: si está tratando de obtener esta información para tablas que están en un SCHEMA diferente, use la vista all_tab_columns, tenemos este problema ya que nuestras Aplicaciones usan un SCHEMA diferente por razones de seguridad.

usa lo siguiente:

P.EJ:

SELECT data_length FROM all_tab_columns WHERE upper(table_name) = ''MY_TABLE_NAME'' AND upper(column_name) = ''MY_COL_NAME''


Puedes usar el comando desc .

desc MY_TABLE

Esto le dará los nombres de columna, si null es válido, y el tipo de datos (y la longitud, si corresponde)


ALL_TAB_COLUMNS debe ser consultable desde PL / SQL. DESC es un comando SQL * Plus.

SQL> desc all_tab_columns; Name Null? Type ----------------------------------------- -------- ---------------------------- OWNER NOT NULL VARCHAR2(30) TABLE_NAME NOT NULL VARCHAR2(30) COLUMN_NAME NOT NULL VARCHAR2(30) DATA_TYPE VARCHAR2(106) DATA_TYPE_MOD VARCHAR2(3) DATA_TYPE_OWNER VARCHAR2(30) DATA_LENGTH NOT NULL NUMBER DATA_PRECISION NUMBER DATA_SCALE NUMBER NULLABLE VARCHAR2(1) COLUMN_ID NUMBER DEFAULT_LENGTH NUMBER DATA_DEFAULT LONG NUM_DISTINCT NUMBER LOW_VALUE RAW(32) HIGH_VALUE RAW(32) DENSITY NUMBER NUM_NULLS NUMBER NUM_BUCKETS NUMBER LAST_ANALYZED DATE SAMPLE_SIZE NUMBER CHARACTER_SET_NAME VARCHAR2(44) CHAR_COL_DECL_LENGTH NUMBER GLOBAL_STATS VARCHAR2(3) USER_STATS VARCHAR2(3) AVG_COL_LEN NUMBER CHAR_LENGTH NUMBER CHAR_USED VARCHAR2(1) V80_FMT_IMAGE VARCHAR2(3) DATA_UPGRADED VARCHAR2(3) HISTOGRAM VARCHAR2(15)


Oracle: obtenga una lista del tipo de datos completo en su tabla:

select data_type || ''('' || data_length || '')'' from user_tab_columns where TABLE_NAME = ''YourTableName''


select column_name, data_type || ''('' || data_length || '')'' as datatype from all_tab_columns where TABLE_NAME = upper(''myTableName'')


select t.data_type from user_tab_columns t where t.TABLE_NAME = ''xxx'' and t.COLUMN_NAME=''aaa''