in

Lista de todos los campos y sus dominios para cada tabla usando SQL (nombre de tabla, nombre de campo, nombre de dominio)

Estoy tratando de generar una lista de todos los campos (en todas las tablas en una geodatabase de Oracle) y los dominios de valor codificado que usan.

+------------+------------+-------------+
| table_name | field_name | domain_name |
+------------+------------+-------------+
| table_1    | field_1    | domain_A    |
| table_1    | field_2    | null        |
| table_1    | field_3    | domain_B    |
| table_1    | field_4    | domain_B    |
+------------+------------+-------------+
| table_2    | field_1    | null        |
| table_2    | field_2    | domain_C    |
| table_2    | field_3    | domain_A    |
+------------+------------+-------------+

Intenté usar el tercer ejemplo en esta página: consultar tablas del sistema de geodatabase con SQL. Me obtiene los nombres de las tablas y los dominios asociados. Pero le falta el nombre del campo:

SELECT reltypes.name AS type,
   origin_items.name AS "Origin Name", dest_items.name AS "Dest Name"
FROM sde.gdb_items origin_items,
   sde.gdb_itemrelationships relationships,
   sde.gdb_items dest_items,
   sde.gdb_itemrelationshiptypes reltypes
WHERE
   origin_items.UUID = relationships.originid AND
   dest_items.UUID = relationships.destid AND
   relationships.type = reltypes.UUID AND
   reltypes.name="DomainInDataset" AND
   origin_items.name LIKE 'PUBWORKS.%'
ORDER BY  origin_items.name

¿Cómo puedo hacer una lista de todos los campos y sus dominios para cada tabla usando SQL? Tenga en cuenta que un dominio puede ser utilizado por más de un campo, por tabla (o incluso por varias tablas).

El entorno es Oracle 12c 10.3.1 Geodatabase.

3 respuestas
3

Consulte el XML en el DEFINITION campo en SDE.GDB_ITEMS_VW.

Usé esta sintaxis para SQL y funcionó.

SELECT
    i.NAME AS item_name
    ,xVal.value('Name[1]', 'nvarchar(max)') field_name
    ,xVal.value('DomainName[1]', 'nvarchar(max)') domain_name 
    ,it.NAME AS item_type
FROM        
     SDE.GDB_ITEMS  i 
JOIN SDE.GDB_ITEMTYPES it 
ON 
         i.Type = it.UUID
    CROSS APPLY i.Definition.nodes('/DETableInfo/GPFieldInfoExs/GPFieldInfoEx') dx(xVal)
WHERE        
    i.NAME IS NOT NULL AND
    xVal.value('DomainName[1]', 'nvarchar(max)') IS NOT NULL 
ORDER BY
    i.NAME

Modificado de Jaime Burgos. La línea CROSS APPLY tenía el parámetro para Oracle. Es diferente en SQL como se incluye a continuación.

SELECT
    i.Name AS FeatureClass
    ,xVal.value('Name[1]','nvarchar(max)') Field
    ,xVal.value('DomainName[1]', 'nvarchar(max)') Domain
FROM GDB_ITEMS  i JOIN GDB_ITEMTYPES it
    ON i.Type = it.UUID
CROSS APPLY i.Definition.nodes('/*/GPFieldInfoExs/GPFieldInfoEx') dx(xVal)
WHERE i.NAME IS NOT NULL
    AND xVal.value('DomainName[1]', 'nvarchar(max)') IS NOT NULL
ORDER BY i.NAME

¿Te ayudó la respuesta?

Subscribirse
Notificar por
guest
0 Comentarios
Inline Feedbacks
Ver todas las Respuestas

¿Hay alguna forma legal de que un estado sea expulsado de los EE. UU.?

Autoenergía divergente de cargas puntuales en Electrodinámica Clásica