Oracle Support for Optional Features of SQL/Foundation
Oracle’s support for optional features of SQL/Foundation is listed in Table C-2:
Table 2 Oracle Support for Optional Features of SQL/Foundation
| Feature ID, Feature | Support |
|---|---|
| B012, Embedded C | Oracle fully supports this feature. |
| B013, Embedded COBOL | Oracle fully supports this feature. |
| B021, Direct SQL | Oracle fully supports this feature, as SQL*Plus. |
| B031, Basic dynamic SQL | Oracle supports dynamic SQL in two styles, documented in the embedded language manuals as "Oracle dynamic SQL" and "ANSI dynamic SQL." ANSI dynamic SQL is an implementation of the standard, with the following restrictions:
Oracle dynamic SQL is similar to standard dynamic SQL, with the following modifications:
|
| B032, Extended dynamic SQL | In ANSI dynamic SQL, Oracle only implements the ability to declare global statements and global cursors from this feature; the rest of the feature is not supported. In Oracle dynamic SQL, Oracle's |
| B122, Routine language C | Oracle supports external routines written in C, though Oracle does not support the standard syntax for creating such routines. |
| B128, Routine language SQL | Oracle supports routines written in PL/SQL, which is Oracle’s equivalent to the standard procedural language SQL/PSM. |
F032, CASCADE drop behavior |
In Oracle, a DROP command invalidates all of the dropped object’s dependent objects. Invalidated objects are effectively unusable until the dropped object is redefined in such a way to allow successful recompilation of the invalidated object. |
F033, ALTER TABLE statement: DROP COLUMN clause |
Oracle provides a DROP COLUMN clause, but without the RESTRICT or CASCADE options found in the standard. |
F034, Extended REVOKE statement |
Oracle supports the following parts of this feature:
Oracle provides equivalent functionality for the following parts of this feature:
|
| F052, Intervals and datetime arithmetic | Oracle only supports the INTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND data types. |
F111, Isolations levels other than SERIALIZABLE |
In addition to SERIALIZABLE, Oracle supports the READ COMMITTED isolation level. |
| F121, Basic diagnostics management | Much of the functionality of this feature is provided through the SQLCA in embedded languages. |
| F191, Referential delete actions | Oracle supports ON DELETE CASCADE and ON DELETE SET NULL. |
F200, TRUNCATE TABLE |
Oracle fully supports this feature, and extends it by permitting truncation of a table that references itself in a referential integrity constraint, and the ability to cascade to child tables with enabled ON DELETE CASCADE referential constraints. |
| F231, Privilege tables | Oracle makes this information available in the following metadata views:
|
F281, LIKE enhancements |
Oracle fully supports this feature. |
F291, UNIQUE predicate |
The UNIQUE is CAST ( |
F302, INTERSECT table operator |
Syntactically, Oracle differs from the standard in that UNION, INTERSECT, and MINUS have the same precedence. |
F312, MERGE statement |
The Oracle
|
F314, MERGE statement with DELETE branch |
Oracle has similar functionality, though in Oracle you must first update a row, after which you can delete it if the revised row meets a condition. |
| F321, User authorization | Oracle provides equivalent functionality for the following subfeatures:
Oracle does not support the following subfeatures:
|
| F341, Usage tables | Oracle makes this information available in the views ALL_DEPENDENCIES, DBA_DEPENDENCIES, and USER_DEPENDENCIES. |
| F381, Extended schema manipulation | Oracle fully supports the following element of this feature:
Oracle partially supports the following element of this feature:
Oracle provides equivalent functionality for the following element of this feature:
Oracle does not support the following parts of this feature:
|
| F382, Alter column data type | Oracle supports this functionality, though with non-standard syntax. As an extension to the standard, Oracle allows you to reduce the size or precision of a column. |
| F383, Set column not null clause | Oracle provides equivalent functionality for the two subfeatures of this feature:
|
| F384, Drop identity property clause | Oracle provides equivalent functionality using ALTER TABLE … MODIFY (… DROP IDENTITY) |
| F386, Set identity column generation clause | Oracle provides equivalent functionality. Oracle's syntax and semantics are the same as the standard, with this exception:
Oracle's |
| F391, Long identifiers | Oracle supports identifiers up to 128 characters in length. |
| F393, Unicode escapes in literals | The Oracle UNISTR function supports numeric escape sequences for all Unicode characters. |
| F394, Optional normal form specification | This feature adds the keywords
Oracle does not support the |
| F401, Extended joined table | Oracle supports FULL outer joins, CROSS joins, and NATURAL joins. |
| F402, Named column joins for LOBs, arrays and multisets | Oracle supports named column joins for columns whose declared type is nested table. Oracle does not support named column joins for LOBs or arrays. |
| F403, Partitioned join tables | Oracle supports this feature, except with FULL outer joins. |
| F411, Time zone specification | Oracle fully supports TIMESTAMP WITH TIME ZONE, but does not support TIME WITH TIME ZONE. |
| F421, National character | Oracle fully supports this feature. |
| F431, Read-only scrollable cursors | Oracle fully supports this feature. |
| F441, Extended set function support | Oracle supports the following parts of this feature:
|
| F442, Mixed column references in set functions | Oracle fully supports this feature. |
| F461, Named character sets | Oracle supports many character sets with Oracle-defined names. Oracle does not support any other aspect of this feature. |
| F491, Constraint management | Oracle fully supports this feature. |
| F492, Optional table constraint enforcement | ENFORCED in the standard is equivalent to ENABLE VALIDATE in Oracle. NOT ENFORCED in the standard is equivalent to DISABLE NOVALIDATE in Oracle. Other combinations of the ENABLE | DISABLE, VALIDATE | NOVALIDATE, and RELY | NORELY options are extensions of the standard. |
| F531, Temporary tables | Oracle supports GLOBAL TEMPORARY tables. |
| F555, Enhanced seconds precision | Oracle provides enhanced support for this feature, supporting up to 9 places after the decimal point. |
| F561, Full value expressions | Oracle fully supports this feature. |
| F571, Truth value tests | Oracle’s LNNVL function is equivalent to the standard’s IS NOT TRUE predicate. |
| F591, Derived tables | Oracle supports
|
| F641, Row and table constructors | In Oracle, a row constructor may be used in an equality or inequality comparison with another row constructor or with a subquery. Oracle does not support anything else in this feature. |
| F690, Collation support | Oracle’s NLSSORT function may be used to change the collation of character expressions. |
| F693, SQL-sessions and client module collations | To set a session collation, use ALTER SESSION SET NLS_COMP = 'LINGUISTIC' and also set NLS_SORT to your desired collation. Oracle does not support client module collations. |
| F695, Translation support | The Oracle CONVERT function can convert between the database character set and the national character set. For other character sets, store the data in the RAW data type and use the PL/SQL package function UTL_RAW.CONVERT. Oracle does not provide the ability to add or drop character set conversions. |
| F721, Deferrable constraints | Oracle fully supports this feature. |
F731, INSERT column privileges |
Oracle fully supports this feature. |
| F761, Session management | Oracle provides the following equivalents for elements of this feature:
|
F763, CURRENT_SCHEMA |
Oracle’s equivalent is SYS_CONTEXT ('USERENV', 'CURRENT_SCHEMA') |
| F771, Connection management | Oracle’s CONNECT statement provides the same functionality as the standard’s CONNECT statement, though with different syntax. Instead of using the standard’s SET CONNECTION, Oracle provides the AT clause to indicate which connection a SQL statement should be performed on. Oracle embedded languages let you disconnect from a connection by using the RELEASE option of either COMMIT or ROLLBACK. |
| F781, Self-referencing operations | Oracle fully supports this feature. |
| F801, Full set function | Oracle fully supports this feature. |
| F831, Full cursor update | Oracle supports the combination of FOR UPDATE and ORDER BY clauses in a query. |
F841, LIKE_REGEX predicate |
Oracle’s equivalent is REGEXP_LIKE. Oracle’s pattern syntax lacks some of the features of the standard’s. Oracle’s match parameter has the same capabilities as the standard’s, though with a few spelling differences. |
F842, OCCURRENCES_REGEX function |
Oracle’s equivalent is REGEXP_COUNT. Oracle’s pattern syntax lacks some of the features of the standard’s. Oracle’s match parameter has the same capabilities as the standard’s, though with a few spelling differences. |
F843, POSITION_REGEX function |
Oracle’s equivalent is REGEXP_INSTR. Oracle’s pattern syntax lacks some of the features of the standard’s. Oracle’s match parameter has the same capabilities as the standard’s, though with a few spelling differences. |
F844, SUBSTRING_REGEX function |
Oracle’s equivalent is REGEXP_SUBSTR. Oracle’s pattern syntax lacks some of the features of the standard’s. Oracle’s match parameter has the same capabilities as the standard’s, though with a few spelling differences. |
F845, TRANSLATE_REGEX function |
Oracle’s equivalent is REGEXP_REPLACE. Oracle’s pattern syntax lacks some of the features of the standard’s. Oracle’s match parameter has the same capabilities as the standard’s, though with a few spelling differences. |
| F850, Top-level |
Oracle fully supports this feature. |
| F851, |
Oracle fully supports this feature. |
| F852, Top-level |
Oracle fully supports this feature. |
| F855, Nested |
Oracle fully supports this feature. |
| F856, Nested |
Oracle fully supports this feature. |
| F857, Top-level |
Oracle fully supports this feature. |
| F858, |
Oracle fully supports this feature. |
| F859, Top-level |
Oracle fully supports this feature. |
| F860, Dynamic |
Oracle fully supports this feature. |
| F861, Top-level |
Oracle fully supports this feature. |
| F862, |
Oracle fully supports this feature. |
| F863, Nested |
Oracle fully supports this feature. |
| F864, Top-level |
Oracle fully supports this feature. |
| F865, Dynamic |
Oracle fully supports this feature. |
F866, FETCH FIRST clause: PERCENT option |
Oracle fully supports this feature. |
F867, FETCH FIRST clause: WITH TIES option |
Oracle fully supports this feature. |
R010, Row pattern recognition: FROM clause |
Oracle fully supports this feature. |
| S023, Basic structured types | Oracle’s object types are equivalent to structured types in the standard. |
| S024, Enhanced structured types | Oracle's syntax is non-standard, but provides equivalents for the following:
|
| S025, Final structured types | Oracle’s final object types are equivalent to final structured types in the standard. |
| S026, Self-referencing structured types | In Oracle, an object type OT may have a reference that references OT. |
| S041, Basic reference types | Oracle’s reference types are equivalent to reference types in the standard. To dereference a reference, dot notation is used, instead of -> as in the standard. |
| S043, Enhanced reference types | Oracle supports the following elements of this feature:
|
| S051, Create table of type | Oracle’s object tables are equivalent to tables of structured type in the standard. |
| S081, Subtables | Oracle supports hierarchies of object views, but not of object base tables. To emulate a hierarchy of base tables, create a hierarchy of views on those base tables. |
| S091, Basic array support | Oracle
|
| S092, Arrays of user-defined types | Oracle supports VARRAYs of object types. |
| S094, Arrays of reference types | Oracle supports VARRAYs of references. |
| S095, Array constructors by query | Oracle supports this using CAST (MULTISET (SELECT …) AS varray_type). The ability to order the elements of the array using ORDER BY is not supported. |
| S097, Array element assignment | In PL/SQL, you can assign to array elements, using syntax that is similar to the standard (SQL/PSM). |
S098, ARRAY_AGG |
Oracle does not have an aggregate that results in a varray. Instead, the COLLECT aggregate may be used to create a multiset, which can be cast to an array of the element type. |
S111, ONLY in query expressions |
Oracle supports the ONLY clause for view hierarchies; Oracle does not support hierarchies of base tables. |
| S151, Type predicate | Oracle fully supports this feature. |
| S161, Subtype treatment | Oracle fully supports this feature. |
| S162, Subtype treatment for references | Supported, with a minor syntactic difference: The standard requires parentheses around the referenced type’s name; Oracle does not support parentheses in this position. |
| S201, SQL-invoked routines on arrays | PL/SQL provides the ability to pass arrays as parameters and return arrays as the result of functions. Procedures and functions written in C may pass arrays and return arrays as the result of functions using the Oracle Type Translator (OTT). |
| S202, SQL-invoked routines on multisets | A PL/SQL routine may have nested tables as parameters, and may return a nested table. Routines written in C may pass arrays and return arrays as the result of functions using the Oracle Type Translator. |
| S232, Array locators | Oracle Type Translator supports descriptors for arrays, which achieve the same purpose as locators. |
| S233, Multiset locators | Oracle supports locators for nested tables. |
| S241, Transform functions | The Oracle Type Translator provides the same capability as transforms. |
| S251, User-defined orderings | Oracle's object type ordering capabilities correspond to the standard's capabilities as follows:
|
| S261, Specified type method | The GetTypeName method of the ANYDATA type may be used to learn the name of a type. |
| S271, Basic multiset support | Multisets in the standard are supported as nested table types in Oracle. The Oracle nested table data type based on a scalar type ST is equivalent, in standard terminology, to a multiset of rows having a single field of type ST and named Oracle supports the following elements of this feature on nested tables using the same syntax as the standard has for multisets:
All other aspects of this feature are supported with non-standard syntax, as follows:
|
| S272, Multisets of user-defined types | Oracle’s nested table type permits a multiset of structured types. Oracle does not have distinct types, so a multiset of distinct types is not supported. |
| S274, Multisets of reference types | A nested table type can have one or more columns of reference type. |
| S275, Advanced multiset support | Oracle supports the following elements of this feature on nested tables using the same syntax as the standard has for multisets:
Oracle does not support the |
| S281, Nested collection types | Oracle permits nesting of its collection types (varray and nested table). |
| S401, Distinct types based on array types | Oracle’s varray types are strongly typed. |
S403, ARRAY_MAX_CARDINALITY |
In PL/SQL, the LIMIT method of a varray returns its maximum cardinality. |
S404, TRIM_ARRAY |
In PL/SQL, the TRIM method of a varray can be used to trim the varray. |
| T041, Basic LOB data type support | Oracle supports the following aspects of this feature:
Oracle provides equivalent support for the following aspects of this feature:
Oracle does not support the following aspects of this feature:
|
| T042, Extended LOB support | Oracle fully supports the following element of this feature:
Oracle provides equivalent functionality for the following elements of this feature:
The following elements of this feature are not supported:
|
| T051, Row types | Oracle object types can be used in place of the standard’s row types. |
| T061, UCS support | Oracle provides equivalent functionality for the following elements of this feature:
Oracle does not support the |
T071, BIGINT data type |
On many implementations, BIGINT refers to a binary integer type with 64 bits, which supports almost 19 decimal digits. The Oracle NUMBER type supports 39 decimal digits. |
| T111, Updatable joins, unions and columns | Oracle’s updatable join views are similar to the standard’s updatable join capabilities. Unlike the standard, Oracle does not require an updatable join view to display the strong candidate key in the SELECT list. Although an updatable join view might have more than one key-preserved table, only one of them may be modified using an UPDATE or DELETE, unlike the standard, which modifies all key-preserved tables of an updatable join. |
T121, WITH (excluding RECURSIVE) in query expression |
Oracle fully supports this feature. |
T122, WITH (excluding RECURSIVE) in subquery |
Oracle fully supports this feature. |
| T131, Recursive query | Oracle supports the use of a WITH clause element that references itself, but without the RECURSIVE keyword. Alternatively, Oracle’s START WITH and CONNECT BY clauses can be used to perform many recursive queries. |
| T132, Recursive query in subquery | Oracle supports the use of a WITH clause element that references itself, but without the RECURSIVE keyword. Alternatively, Oracle’s START WITH and CONNECT BY clauses can be used to perform many recursive queries. |
T141, SIMILAR predicate |
Oracle provides REGEXP_LIKE for pattern matching with a Perl-like syntax. |
T172, AS subquery clause in table definition |
Oracle’s AS subquery feature of CREATE TABLE has substantially the same functionality as the standard, though there are some syntactic differences. |
| T174, Identity columns | Oracle supports this feature, with the following syntactic differences:
|
| T175, Generated columns | Oracle supports this feature, with the following restrictions:
|
| T176, Sequence generator support | Oracle’s sequences have the same capabilities as the standard’s, though with different syntax. |
| T178, Identity columns: simple restart option | Oracle’s START WITH LIMIT VALUE is the same as the standard’s simple restart if the identity column has not cycled. |
| T180, System-versioned tables | Oracle's Flashback capability is substantially the same as the standard's system-versioned tables. Some key differences are:
|
| T181, Application-time period tables | Oracle supports the following elements of this feature:
Oracle extends this feature:
|
| T201, Comparable data types for referential constraints | Oracle fully supports this feature. |
| T211, Basic trigger capability | Oracle's triggers differ from the standard as follows:
|
| T212, Enhanced trigger capability | This feature permits statements triggers, which Oracle supports, as described for feature T211, Basic trigger capability. |
T213, INSTEAD OF triggers |
Oracle supports INSTEAD OF triggers on views, with syntax and semantics agreeing with the standard except as noted for feature T211, Basic trigger capability. Oracle permits an INSTEAD OF trigger on a view that specified WITH CHECK OPTION, unlike the standard. |
T241, START TRANSACTION statement |
Oracle’s SET TRANSACTION statement starts a transaction making it equivalent to the standard’s START TRANSACTION rather than the standard’s SET TRANSACTION. Oracle’s READ ONLY transactions are at SERIALIZABLE isolation level. |
| T271, Savepoints | Oracle supports this feature, except:
|
| T285, Enhanced derived column names | This feature pertains only to derived columns in a SELECT list with no column alias and consisting of a SQL parameter reference. In that case, the column name defaults to the parameter name, the same as in the standard. |
| T323, Explicit security for external routines | The Oracle syntax AUTHID { CURRENT USER | DEFINER } when used when creating an external function, procedure, or package is equivalent to the standard’s EXTERNAL SECURITY { DEFINER | INVOKER }. |
| T324, Explicit security for SQL routines | Oracle’s syntax AUTHID { CURRENT USER | DEFINER } when used when creating a PL/SQL function, procedure, or package is equivalent to the standard’s SQL SECURITY { DEFINER | INVOKER }. |
| T325, Qualified SQL parameter reference | PL/SQL supports the use of a routine name to qualify a parameter name. |
| T326, Table functions | Oracle provides equivalents for the following elements of this feature:
|
| T331, Basic roles | Oracle supports this feature, except for REVOKE ADMIN OPTION FOR |
| T341, Overloading of SQL-invoked functions and procedures | Oracle supports overloading of functions and procedures. However, the rules for handling certain data type combinations are not the same as the standard. For example, the standard permits the coexistence of two functions of the same name differing only in the numeric types of the arguments, whereas Oracle does not permit this. |
| T351, Bracketed comments | Oracle fully supports this feature. |
| T431, Extended grouping capabilities | Oracle fully supports this feature. |
T432, Nested and concatenated GROUPING SETS |
Oracle supports concatenated GROUPING SETS, but not nested GROUPING SETS. |
T433, Multiargument function GROUPING |
The Oracle GROUP_ID function can be used to conveniently distinguish groups in a grouped query, serving the same purpose as the standard multiargument GROUPING function. |
T441, ABS and MOD functions |
Oracle supports the ABS function. Oracle’s MOD function is similar to the standard, though the behavior is different if the two arguments are of opposite sign. |
| T471, Result sets return value | PL/SQL ref cursors provide all the functionality of the standard’s result set cursors. |
T491, LATERAL derived tables |
Oracle fully supports this feature. |
T501, Enhanced EXISTS predicate |
Oracle fully supports this feature. |
| T511, Transaction counts | Oracle supports the count of transactions committed and rolled back via the system views V$STATNAME and V$SESSTAT. |
T521, Named arguments in CALL statement |
Oracle fully supports this feature. |
T522, Default values for IN parameters of SQL-invoked procedures |
Oracle fully supports this feature. |
T524, Named arguments in routine invocations other than a CALL statement |
Oracle fully supports this feature. |
| T525, Default values for parameters of SQL-invoked functions | Oracle fully supports this feature. |
| T571, Array-returning external SQL-invoked function | Oracle table functions returning a varray can be defined in external programming languages. When declaring such functions in SQL, use the CREATE FUNCTION command with the PIPELINED USING clause. |
| T572, Multiset-returning external SQL-invoked function | Oracle table functions returning a nested table can be defined in external programming languages. When declaring such functions in SQL, use the CREATE FUNCTION command with the PIPELINED USING clause. In the body of the function, use the OCITable interface. The function must be invoked within the TABLE operator in the FROM clause. |
| T581, Regular expressions substring functions | Oracle provides the REGEXP_SUBSTR function to perform substring operations using regular expression matching. |
T591, UNIQUE constraints of possibly null columns |
Oracle permits a UNIQUE constraint on one or more nullable columns. If the UNIQUE constraint is on a single column, then the semantics are the same as the standard (the constraint permits any number of rows that are null in the designated column). If the UNIQUE constraint is on two or more columns, then the semantics are nonstandard. Oracle permits any number of rows that are null in all the designated columns. Unlike the standard, if a row is non-null in at least one of the designated columns, then another row having the same values in the non-null columns of the constraint is a constraint violation and not permitted. |
| T611, Elementary OLAP operations | Oracle fully supports this feature, except that DISTINCT is only supported in conjunction with window partitioning but not with window framing. |
| T612, Advanced OLAP operations | Oracle supports the following elements of this feature: Oracle does not support the following element of this feature:
|
| T613, Sampling | Oracle uses the keyword SAMPLE instead of the standard’s keyword, TABLESAMPLE. Oracle uses the keyword BLOCK instead of the standard’s keyword, SYSTEM. Oracle uses the absence of the keyword BLOCK to indicate a Bernoulli sampling of rows, indicated in the standard by the keyword BERNOULLI. Oracle does not support sampling of derived tables or views that are not key-preserving. Oracle does not permit sampling in a subquery of a DELETE, UPDATE or MERGE statement. |
T614, NTILE function |
Oracle fully supports this feature. |
T615, LEAD and LAG functions |
Oracle fully supports this feature. |
T616, Null treatment option for LEAD and LAG functions |
Oracle fully supports this feature. |
T617, FIRST_VALUE and LAST_VALUE functions |
Oracle fully supports this feature. |
T618, NTH_VALUE function |
Oracle fully supports this feature. |
| T621, Enhanced numeric functions | Oracle fully supports this feature, except for the alternate spelling CEILING of the CEIL function. |
| T622, Trigonometric functions | Oracle fully supports this feature. |
| T623, General logarithm function | Oracle fully supports this feature. |
T625, LISTAGG |
Oracle fully supports this feature. |
| T641, Multiple column assignment | The standard syntax to assign to multiple columns is supported if the assignment source is a subquery. |
| T652, SQL-dynamic statements in SQL routines. | PL/SQL supports dynamic SQL. |
| T654, SQL-dynamic statements in external routines | Oracle supports dynamic SQL in embedded C, which may be used to create an external routine. |
| T655, Cyclically dependent routines | PL/SQL supports recursion. |
| T811, Basic SQL/JSON constructor functions | Oracle fully supports this feature, except for the JSON_ARRAY constructor by query. |
T812, SQL/JSON: JSON_OBJECTAGG |
Oracle fully supports this feature. |
T813, SQL/JSON: JSON_ARRAYAGG with ORDER BY |
Oracle fully supports this feature. |
| T821, Basic SQL/JSON query operators | Oracle fully supports this feature. |
T822, SQL/JSON: IS JSON WITH UNIQUE KEYS predicate |
Oracle fully supports this feature. |
T823, SQL/JSON: PASSING clause |
Oracle supports the PASSING clause in JSON_EXISTS. |
T825, SQL/JSON: ON EMPTY and ON ERROR clauses |
Oracle fully supports this feature, except that:
|
T828, JSON_QUERY |
Oracle fully supports this feature. |
T829, JSON_QUERY: array wrapper options |
Oracle fully supports this feature. |
| T832, SQL/JSON path language: item method | Oracle fully supports the following item methods:
Oracle provides the following comparable support:
Oracle extends this feature by supporting the following item methods:
|
| T833, SQL/JSON path language: multiple subscripts | Oracle fully supports this feature, except that subscripts have to be specified in strictly monotonically increasing order. |
| T834, SQL/JSON path language: wildcard member accessor | Oracle fully supports this feature. |
| T835, SQL/JSON path language: filter expression | Oracle supports the filter expression as the last step of the SQL/JSON path expression in JSON_EXISTS. |
| T839, Formatted cast of datetimes to/from character strings | Oracle supports this feature with a minor syntactic difference: Oracle uses a comma instead of the keyword FORMAT. |