Meu software GIS tem um tipo de objeto Oracle 18c chamado ST_GEOMETRY .
O tipo de objeto tem atributos :
Os atributos do tipo espacial representam as seguintes informações:
- Entidade: O tipo de recurso geométrico armazenado na coluna espacial (cadeia de linhas, cadeia de várias linhas, multiponto, multipolígono, ponto ou polígono), cujo valor é uma máscara de bits derivada do procedimento armazenado st_geom_util.
- Numpts: O número de pontos que definem a geometria; para geometrias de várias peças, isso inclui os separadores entre cada peça, um ponto para cada separador.
- Minx, miny, maxx, maxy: O envelope espacial da geometria
- Área: A área da geometria
- Len: O comprimento do perímetro da geometria
- SRID: Contém o identificador para a geometria que a vincula a seu registro de referência espacial associado (sistema de coordenadas) na tabela ST_Spatial_References
- Pontos: Contém o fluxo de bytes das coordenadas do ponto que definem a geometria
Posso selecionar o atributo de um objeto usando um dos dois métodos:
- Use a função TREAT() do Oracle .
select treat(shape as sde.st_geometry).numpts as num_points from a_test_table NUM_POINTS ---------- 37 161
- Ou posso simplesmente usar um alias:
select a.shape.numpts as num_points from a_test_table a NUM_POINTS ---------- 37 161
Pergunta:
Por que é necessário usar um alias para selecionar um atributo de um objeto Oracle?
Se eu fosse remover o alias...
select
shape.numpts as num_points
from
a_test_table
Então eu receberia um erro:
ORA-00904: "SHAPE"."NUMPTS": invalid identifier
Porque a Oracle assim o fez.
t_alias
É um requisito para que o analisador SQL reconheça os elementos. Sem o alias fica confuso com a notação de ponto. Observe que ele se aplica a todos os tipos de objeto. Não apenas ST_GEOMETRY ou SDO_GEOMETRY.
(Eu não sabia do
treat(... as ...)
truque. Mas usar um alias ainda é mais simples.