Discussions
Categories
- 196.9K All Categories
- 2.2K Data
- 239 Big Data Appliance
- 1.9K Data Science
- 450.3K Databases
- 221.7K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 550 MySQL Community Space
- 478 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 545 SQLcl
- 4K SQL Developer Data Modeler
- 187K SQL & PL/SQL
- 21.3K SQL Developer
- 295.9K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.6K Development Tools
- 107 DevOps
- 3.1K QA/Testing
- 646K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 155 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 18 Java Essentials
- 160 Java 8 Questions
- 86K Java Programming
- 80 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 204 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 441 LiveLabs
- 38 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 171 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 232 Portuguese
Techniques for selecting an object's attribute

I have a column that is an object datatype — SDO_GEOMETRY:
create table my_tbl (shape sdo_geometry); insert into my_tbl (shape) values (sdo_geometry('LINESTRING(1 2,3 4)'));
The object has attributes (2.2 SDO_GEOMETRY Object Type):
SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES
I want to select an attribute from the object. I can do that by using a table alias:
select a.shape.sdo_gtype from my_tbl a
Out of curiosity, are there any other ways to select object attributes, other than creating an alias?
As a non-expert, it seems strange to me that the alias is necessary. Of course, creating an alias isn't a big deal, but I would have guessed that I could just use the dot notation without an alias: select shape.sdo_gtype from my_tbl
. But that doesn't work: ORA-00904: "SHAPE"."SDO_GTYPE": invalid identifier
.
Best Answer
-
It's to do with how the parser tries to see database objects, so shape.sdo_gtype assumes that the "shape" is a table alias and not the object name. Sure, you can use the methods you've already mentioned e.g. alias the table and prefix with that, or use TREAT. You can also surround the object name in braces/brackets to indicate it's not a table alias...
SQL> select (shape).sdo_gtype 2 from my_tbl 3 / (SHAPE).SDO_GTYPE ----------------- 2002
Answers
-
It looks like I can use the TREAT() function:
select treat(shape as sdo_geometry).sdo_gtype from my_tbl
https://dbfiddle.uk/?rdbms=oracle_21&fiddle=9869d0a53afd0bef3d256540970aec72
Although that's not much different than the alias option.
Related:
-
-
It's to do with how the parser tries to see database objects, so shape.sdo_gtype assumes that the "shape" is a table alias and not the object name. Sure, you can use the methods you've already mentioned e.g. alias the table and prefix with that, or use TREAT. You can also surround the object name in braces/brackets to indicate it's not a table alias...
SQL> select (shape).sdo_gtype 2 from my_tbl 3 / (SHAPE).SDO_GTYPE ----------------- 2002