Numero de columnas de una tabla

last
30 de Diciembre del 2005
Es posible saber el numero de columnas que hay en una tabla mediante una select?

Jor-El
30 de Diciembre del 2005
Si

last
30 de Diciembre del 2005
bien, ¿me podrias decir como se hace?, por favor.

ar
30 de Diciembre del 2005
select count(*) from all_tabs_columns where table_name = 'NOMBRE_TABLA';

Jor-El
30 de Diciembre del 2005
and owner like 'DUEÑO DE LA TABLA'

( Por si existe la misma tabla en mas de un esquema )

feliz Año

last
30 de Diciembre del 2005
gracias jor-el, pero no es lo que busco, gracias de todos modos.

andrewsreid
30 de Diciembre del 2005
El ejemplo siguiente te muestra lo que debes hacer.
No es necesario dar el nombre del dueño.
En mi ejemplo, todas las tablas en USER_TABLES pertenecen a UIMSMGR:

SQL> show user
USER is "UIMSMGR"
SQL> desc uarappl
Name Null? Type
----------------------------------------- -------- ----------------------------
UARAPPL_FROM_AR_TRANS NOT NULL NUMBER(15)
UARAPPL_TO_AR_TRANS NOT NULL NUMBER(15)
UARAPPL_TRANS_IND NOT NULL VARCHAR2(1)
UARAPPL_GL_IND NOT NULL VARCHAR2(1)
UARAPPL_ACTIVITY_DATE NOT NULL DATE
UARAPPL_USER_ID NOT NULL VARCHAR2(30)
UARAPPL_AMOUNT NOT NULL NUMBER(10,2)
UARAPPL_ADJ_REF_TRANS NUMBER(15)
UARAPPL_FEED_DOC_CODE VARCHAR2(8)
UARAPPL_FEED_SEQ_NUM NUMBER(4)
UARAPPL_BHST_TRAN_NUM_MASTER NUMBER(15)
UARAPPL_BHST_TRAN_NUM_SUBORD NUMBER(15)
UARAPPL_PREQ_CODE NUMBER(9)

SQL> select count(*) from user_tab_columns where table_name = 'UARAPPL';

COUNT(*)
----------
13

SQL>



Jor-El
30 de Diciembre del 2005
Claro, pero yo no me refería a USER_TAB_COLUMNS, hablaba de ALL_TAB_COLUMNS.

Obviamente en USER_TAB_COLUMNS todas las tablas pertenecen al mismo usuario

andrewsreid
30 de Diciembre del 2005
Lo siento:

En mi ejemplo, todas las tablas en USER_TAB_COLUMNS pertenecen a UIMSMGR.

Jor-El
30 de Diciembre del 2005
De nada, pero no has entendido lo que te decimos.

Para consultar USER_TAB_COLUMNS ( No user_tables ) no se necesitan permisos de ninguna clase sobre el diccionario de datos, ya que lo que estas consultando son datos de TUS TABLAS

Prueba esto y nos cuentas anda :

SELECT COUNT(*)
FROM USER_TAB_COLUMNS
where table_name like 'TU_TABLA'


ar
30 de Diciembre del 2005
Perdón...

all_tab_columns en vez de all_tabs_columns

last
30 de Diciembre del 2005
gracias, pero no he especificado lo que necesito, necesito saber la forma en que un usuario normal(sin privilegio sobre el diccionario de datos) puede saber el numero de columnas de una tabla mediante una select('desc <Nombre tabla>' no me vale).

De todos modos gracias "ar" por tu ayuda.

ar
30 de Diciembre del 2005
y utilizando user_tables???

last
30 de Diciembre del 2005
he estado mirando la descripcion de user_tables y no encuentro ninguna columna que tenga ese dato.

last
30 de Diciembre del 2005
ya esta, muchas gracias a todos y perdon las molestias.

andrewsreid
30 de Diciembre del 2005
Tienes razón.
Es necesario poner el nombre del dueño si miras ALL_TAB_COLUMNS.
Allí tienes tablas de muchos dueños:

SQL> l
1* select owner, count(*) from all_tab_columns group by owner
SQL> /

OWNER COUNT(*)
------------------------------ ----------
BANSCHEMALNK 6
BUSOBJECTS 109
BUSPROD 2
BUSSCHEMALNK 184
CRSBUS 52
FERRYM 6
FIMSMGR 455
GENERAL 852
INTUSE 113
MISTRIG 231
ORACLE 31

OWNER COUNT(*)
------------------------------ ----------
OUTLN 21
PERFSTAT 293
SATURN 43
STYLEST_PROD 30
SYS 14311
SYSTEM 236
TFEMGR 99
TONBA 69
TOPQE 45
TOPQEPROD 110
UDETMGR 175

OWNER COUNT(*)
------------------------------ ----------
UIMSMGR 8002
WATERMARK 1

24 rows selected.

SQL>

Jor-El
30 de Diciembre del 2005
Claro, pero solo habría que ponerlo si una tabla se llama igual en mas de un esquema, sino no haria falta