2012-01-05 91 views

Respuesta

5

Uso SYSCAT.COLUMNS catalog view:

SELECT TABNAME 
FROM SYSCAT.COLUMNS 
WHERE 
    TABNAME IN ('table name 1', 'table name 2') AND 
    COLNAME = 'column_name'; 
8

Probado en DB2 z/OS 9.1 y LUW 9.7:

SELECT STRIP(TBCREATOR) || '.' || STRIP(TBNAME) 
FROM SYSIBM.SYSCOLUMNS 
WHERE NAME = 'your_col' 
    AND TBNAME IN ('list', 'of', 'tables') 

Si sólo desea resultados de un esquema específico puede agregar AND TBCREATOR = 'your_schema' hasta el final de la consulta.

+0

Gracias por la respuesta, quiero consultar las tablas de un Esquema específico. Traté de agregar la línea que sugirió, pero la búsqueda no arroja nada (le di el nombre de una columna que sé que existe). ¿Puede explicarme un poco más cómo funciona la consulta? Gracias –

+0

Lo sentimos typo: quest es * request –

+0

Lo que puede estar ensuciándolo es que no agrega el esquema a la parte 'TBNAME' de la cláusula where. Digamos, por ejemplo, que está buscando una columna llamada 'UPDATE_TIMESTAMP' que podría estar en' SCH.TAB1' o 'SCH.TAB2', y cree que puede estar en' SCH.TAB3' (pero no lo está). Su consulta sería 'SELECT STRIP (TBCREATOR) || ''. || TIRA (tbname) DE SYSIBM.SYSCOLUMNS WHERE NOMBRE = 'UPDATE_TIMESTAMP' Y EN tbname ('TAB1', 'TAB2', 'TAB3') Y TBCREATOR = 'SCH'' – bhamby

0

Otra forma de hacerlo es con la gestión de errores:

declare v_sql varchar(1000); 
declare col_missing integer default 0; 
declare col_does_not_exist condition for sqlstate '42703'; 
declare continue handler for col_does_not_exist set col_missing = 1; 

set v_sql = 'select table.foo from table'; 
execute immediate v_sql; 

if col_missing = 1 then 
    --Do something if column foo doesn't exist. 
end if; 

Este método funcionará en las mesas de sesión, y también se puede utilizar en un objeto, incluso si usted no sabe si se trata de una mesa , vista, alias, etc.

es importante especificar table.foo en lugar de sólo el nombre de la columna, ya que de lo contrario la existencia de otro objeto (como una variable) llama foo rompería la prueba.

Este controlador continuará enmascarando cualquier otro error para las columnas que faltan dentro del alcance, por lo que es mejor limitar el alcance a solo la prueba que desea hacer.

Cuestiones relacionadas