Numero de columnas de una tabla
Es posible saber el numero de columnas que hay en una tabla mediante una select?
select count(*) from all_tabs_columns where table_name = 'NOMBRE_TABLA';
and owner like 'DUEÑO DE LA TABLA'
( Por si existe la misma tabla en mas de un esquema )
feliz Año
( Por si existe la misma tabla en mas de un esquema )
feliz Año
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>
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>
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
Obviamente en USER_TAB_COLUMNS todas las tablas pertenecen al mismo usuario
Lo siento:
En mi ejemplo, todas las tablas en USER_TAB_COLUMNS pertenecen a UIMSMGR.
En mi ejemplo, todas las tablas en USER_TAB_COLUMNS pertenecen a UIMSMGR.
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'
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'
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.
De todos modos gracias "ar" por tu ayuda.
he estado mirando la descripcion de user_tables y no encuentro ninguna columna que tenga ese dato.
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>
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>
