GRAPHQL Table Function
graphql_string_value::=
graphql_comment::=
graphql_name::=
graphql_query::=
graphql_object_name::=
graphql_anyname::=
graphql_quoted_name::=
graphql_qbe_clause::=
graphql_qbe_argument_list::=
graphql_qbe_argument_list_continue::=
graphql_qbe_equality_argument::=
graphql_qbe_relational_argument::=
graphql_qbe_logical_argument::=
graphql_qbe_logical_argument_list::=
graphql_qbe_logical_argument_list_continue
graphql_qbe_item_operator_argument::=
graphql_qbe_item_operator_list::=
graphql_qbe_item_operator_list_continue::=
graphql_qbe_operator_name::=
graphql_field_arguments::=
graphql_field_argument_list::=
graphql_field_argument_list_continue::=
graphql_field_argument::=
graphql_variable_name::=
graphql_selection_set::=
graphql_selection::=
graphql_field::=
graphql_field_name::=
graphql_alias::=
graphql_directives::=
graphql_directive::=
graphql_directive_arguments::=
graphql_directive_argument_list::=
graphql_directive_argument_list_continue::=
graphql_directive_argument::=
graphql_directive_argument_name::=
graphql_directive_argument_value::=
graphql_any_value::=
graphql_value::=
graphql_list_value::=
graphql_list_value_continue::=
graphql_passing_clause::=
graphql_variable_list::=
graphql_variable_list_continue::=
graphql_variable_identifier::=
Purpose
The GRAPHQL
table function is a SQL table function that you can use to query database tables and get the result in the form of JSON documents.
The GRAPHQL
table function evaluates the embedded GraphQL query that is passed in as a string literal. The function returns rows derived from the GraphQL selection set, consistent with the JSON-relational duality mapping of the referenced object.
You can use the function only in the FROM
clause of the SELECT
statement.
Note:
Whitespaces and comments can appear anywhere in the graphql_query
clause.
Semantics
graphql_query
The input to the function, graphql_query
, is a structured and hierarchical representation of the objects and fields to be queried .
The output of the function is a single column of type JSON consisting of the set of JSON documents corresponding to graphql_query
.
graphql_passing_clause
If present, graphql_passing_clause
provides variable bindings used by graphql_field_arguments
or QBE. It starts with the keyword PASSING
, and is followed by mappings of GraphQL variables to SQL expressions, literal, or bind variables.
-
graphql_object_name
refers to fully qualified names, for example,schema_name.table_name
ortable_name.column_name
. -
graphql_field_arguments
refers to a set of predicates that restricts the result set. These predicates compare field values to provided literals (or even variables in the GraphQL table function). If multiple arguments are present, they are combined conjunctively (logicalAND
). Each graphql field argument is a name: value pair or a name: variable pair.You must enclose the list of arguments in parentheses.
A variable in the GraphQL table is identified by the
'$'
sign as the first character.
graphql_selection_set
graphql_selection_set
declares the the fields that you want to project from the current object.
graphql_field
maps the underlying relational object (column or table) to the JSON field.
The optional argument graphql_alias
changes the output key name.
The optional argument graphql_directives
alters how the field is resolved or how it affects the metadata of the duality view.
Optional nested graphql_selection_set
declares the fields to be projected in the nested object.
graphql_field_name
can be the name of a table or a column or even a numeric literal.
graphql_alias
renames the output key of the selected field. The underlying field lookup uses graphql_field_name
. The output uses graphql_alias
.
graphql_qbe_clause
Use graphql_qbe_clause
to filter the JSON documents, by having predicates on the fields in the GraphQL query. It can express equality, relational, logical, and item-level operators.
graphql_qbe_clause
is enclosed within parentheses and starts with the CHECK
keyword, followed by the colon and the list of QBE arguments within curly braces.
qbe_equality_argument
is a field-level equality predicate. It evaluates to true when the field equals the provided literal or bound variable.
qbe_relational_argument
is a field-level relational predicate. The QBE operator refers to a comparison, which is applied to the specified field and the provided operand.
qbe_logical_argument
refers to logical composition (for example, AND
, or OR
). The operator combines the enclosed argument list according to its truth table, evaluated against the current scope. Nested logical clauses are also allowed.
qbe_item_operator_argument
refers to QBE item operators that can be used to first perform some transformations on the field before comparing it to the value.
graphql_directives
Directives are metadata-driven modifiers applied to fields or selection sets, written as @directive_name(directive_arguments)
where each graphql_directive_argument
is written as graphql_directive_argument_name
: graphql_directive_argument_value
. They control behavior like conditional inclusion, shape in the response, computed transformations, access and mutability. The arguments for a directive are name: value pairs. The value can be a name, a string, a number or even a list of values.
Comments in a GraphQL Expression
You can specify comments in a single line in a GraphQL expression. A single line comment is preceded by a hash (# )sign, in accordance with the GraphQL standard.
You can also specify SQL comments in the query containing the GraphQL expression. A single line SQL comment is preceded by a double dash (--). A SQL comment spanning multiple lines is enclosed within "/*" and "*/".
Rules
-
The SQL comments can be placed anywhere in the query, but the GraphQL comments are valid only within the GraphQL expression.
-
These comments will be preserved in the DDL, that is when you fetch the create view DDL using
DBMS_METADATA.GET_DDL
, these comments will be present in the output. -
Only single line GraphQL style comments (comments starting with # ) are allowed in the GraphQL expression provided in the GraphQL table function.
Example: Valid Comments
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW student_ov AS student { # this is a valid single line GraphQL comment _id: stuid Name: name -- SQL comments can be placed within GraphQL expression as well };
Example
Querying the DB using GraphQL query
SELECT * FROM GRAPHQL (' employees { _id: employee_id Name: first_name } ');
The output is:
{ "_id" : 174, "Name" : "Ellen" } { "_id" : 166, "Name" : "Sundar" } { "_id" : 130, "Name" : "Mozhe" } { "_id" : 105, "Name" : "David" }
See Declarative GraphQL Developer's Guide for more information on GraphQL.