5.1.3 Accessing Label Properties
You can access a property inside a graph element pattern, in the out-of-line
WHERE
clause or in the COLUMNS
clause.
Consider the following graph element pattern where a
is
a graph element variable and name
is a property name:
(a IS person WHERE a.name='John')
You can then reference the property in the WHERE
clause
inside the graph element pattern as a.name
. This means
a.name
references the property name
of the
graph element bound to the graph pattern variable a
.
Also, the following conditions apply when accessing a property:
- The property
name
is part of at least one table that satisfies the label expression. - A graph variable name must always be used to access a property.
- At the time of query compilation, certain type checking rules apply for the vertex or edge table properties. See Type Compatibility Rules for Determining Property Types for more information.
The following examples describe a few scenarios for determining property
types when querying SQL property graphs. Note that Example 5-1 to Example 5-3 refer to the SQL property graph definition for g1
which contains
height
as a shared property across different labels.
Example 5-1 Determining the Property Type for a Single Label
The data type for a.height
in the following query is
FLOAT
:
SELECT * FROM GRAPH_TABLE (g1
MATCH
(a IS person)
COLUMNS (a.height)
);
HEIGHT
----------
1.8
1.65
1.75
1.7
Example 5-2 Determining Union Compatible Property Type for Two Different Labels
The data type for a.height
in the following query is the union
compatible type between FLOAT
and
BINARY_DOUBLE
:
SELECT * FROM GRAPH_TABLE (g1
MATCH
(a IS person|t3)
COLUMNS (a.height)
);
HEIGHT
----------
1.8E+000
1.65E+000
1.75E+000
1.7E+000
1.8E+000
1.65E+000
In the SQL property graph g1
, the property type for
height
associated with the labels person
and
t3
is FLOAT
and BINARY_DOUBLE
respectively. BINARY_DOUBLE
takes precedence over
FLOAT
and hence the resulting output property type for
a.height
is BINARY_DOUBLE
.
Example 5-3 No Union Compatible Property Type for Two Different Labels
Error is thrown for the following query as the data type for
a.height
is not union compatible across the tables,
person
(FLOAT
) and t2
(VARCHAR
):
SELECT * FROM GRAPH_TABLE (g1
MATCH
(a IS person|t2)
COLUMNS (a.height)
);
On execution. the preceding query throws the error - ORA-01790:
expression must have same datatype as corresponding expression
Example 5-4 Determining Union Compatible Property Type for Shared Labels
Consider the SQL property graph definition for g3
which uses a
shared label (t
) that is associated with a shared property name
(height
).
When querying g3
, the data type for
a.height
in the following SQL graph query is
BINARY_DOUBLE
:
SELECT * FROM GRAPH_TABLE (g3
MATCH
(a IS t)
COLUMNS (a.height)
);
BINARY_DOUBLE
as per the Type Compatibility Rules for Determining Property Types: HEIGHT
----------
1.8E+000
1.65E+000
1.75E+000
1.7E+000
1.8E+000
1.65E+000
Parent topic: About Graph Pattern