Discussions
Categories
- 197K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.8K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 556 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.4K Development
- 17 Developer Projects
- 139 Programming Languages
- 293.1K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 161 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 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
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 474 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 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