Some parts in the output code are omitted for clarity reasons.
Description
An object identifier (represented by the keyword OID) uniquely identifies an object and enables you to reference the object from other objects or relational tables. A data type category called REF represents such references. A REF data type is a container for an object identifier. REF values are pointers to objects. (Oracle SQL Language Reference REF Data Types)
REF Data types are not supported in Snowflake, and there is no current workaround to implement a similar component.
As of now, they are currently being recognized as user-defined functions and "DANGLING" clauses are not being recognized. Finally, the OID clause in view is being removed, as there is no workaround for them.
CREATEVIEWgeneric_viewASSELECT REF(type) AS ref_col, MAKE_REF(type, identifier_column) AS make_ref_colFROM generic_table;SELECT v.ref_col, v.make_ref_colFROM generic_view vWHERE v.ref_col ISNOT DANGLING AND v.make_ref_col ISNOT DANGLING
Sample Source Patterns
Types and Tables for References
Please consider the following types, tables, inserts and view. They will be used for the next pattern section.
Oracle
CREATETYPEemail_typ_demoASOBJECT ( email_id INTEGER , email VARCHAR2(30) );CREATETYPEcustomer_typ_demoASOBJECT ( customer_id INTEGER , cust_first_name VARCHAR2(20) , cust_last_name VARCHAR2(20) , email_id INTEGER ) ;CREATETABLEemail_table_demo OF email_typ_demo;CREATETABLEcustomer_table_demo OF customer_typ_demo;INSERT INTO customer_table_demo VALUES(customer_typ_demo(1, 'First Name 1', 'Last Name 1', 1));INSERT INTO customer_table_demo VALUES(customer_typ_demo(2, 'First Name 2', 'Last Name 2', 2));INSERT INTO email_table_demo VALUES(email_typ_demo(1, 'abc@def.com'));CREATEVIEWemail_object_view OF email_typ_demo WITHOBJECT IDENTIFIER (email_id) ASSELECT*FROM email_table_demo;
Selects and Views using REFs
Oracle
IN -> Oracle_01.sql
CREATEVIEWemail_object_view OF email_typ_demo WITHOBJECT IDENTIFIER (email_id) ASSELECT*FROM email_table_demo;CREATEVIEWcustomer_viewASSELECT REF(ctb) AS customer_reference , MAKE_REF(email_object_view, ctb.email_id) AS email_refFROM customer_table_demo ctb;SELECT c.customer_reference.cust_first_name, c.email_ref.emailFROM customer_view c;SELECT c.customer_reference.cust_first_name, c.email_ref.emailFROM customer_view cWHERE c.email_ref ISNOT DANGLING;
CUSTOMER_REFERENCE.CUST_FIRST_NAME|EMAIL_REF.EMAIL|
----------------------------------+---------------+
First Name 1 |abc@def.com |
First Name 2 | |
CUSTOMER_REFERENCE.CUST_FIRST_NAME|EMAIL_REF.EMAIL|
----------------------------------+---------------+
First Name 1 |abc@def.com |
Snowflake
OUT -> Oracle_01.sql
CREATE OR REPLACEVIEWemail_object_viewCOMMENT ='{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'AS--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **SELECT*FROM email_table_demo;CREATE OR REPLACEVIEWcustomer_viewCOMMENT ='{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'ASSELECT REF(ctb) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'REF' NODE ***/!!! AS customer_reference , MAKE_REF(email_object_view, ctb.email_id) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'MAKE_REF' NODE ***/!!! AS email_refFROM customer_table_demo ctb;SELECT c.customer_reference.cust_first_name, c.email_ref.emailFROM customer_view c;SELECT c.customer_reference.cust_first_name, c.email_ref.emailFROM customer_view cWHERE c.email_ref;-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '14' COLUMN '19' OF THE SOURCE CODE STARTING AT 'IS'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS ';' ON LINE '10' COLUMN '21'. FAILED TOKEN WAS 'IS' ON LINE '14' COLUMN '19'. CODE '94'. **-- IS NOT DANGLING
Known Issues
1. REF and MAKE_REF are not being recognized
Instead they are currently being marked as user-defined functions.
2. DANGLING clause is not being recognized
DANGLING clauses are causing parsing errors when running SnowConvert.
3. OID Clauses in view are not supported by SnowConvert, but there is no EWI related to them
The OID clause is not supported by either SnowConvert, nor Snowflake but there should be an EWI related to them.
Related EWIs
SSC-EWI-0001: Unrecognized token on the line of the source code.