SnowConvert AI – Oracle – XML-Typen

Beschreibung

Extensible Markup Language (XML) ist ein Standardformat, das vom World Wide Web Consortium (W3C) zur Darstellung strukturierter und unstrukturierter Daten im Web entwickelt wurde. Universelle Ressourcenbezeichner (URIs) identifizieren Ressourcen wie Webseiten überall im Web. Oracle bietet Typen zur Verarbeitung von XML und URI-Daten sowie eine Klasse von URIs namens DBURIRef-Typen für den Zugriff auf Daten, die in der Datenbank selbst gespeichert sind. (Oracle SQL-Sprachreferenz – XML-Typen)

URIFactory-Paket

Beschreibung

Oracle stellt auch das Paket URIFactory zur Verfügung, das Instanzen der verschiedenen Subtypen des URITypes erstellen und zurückgeben kann. Das Paket analysiert die URL-Zeichenfolge, identifiziert den Typ von URL (HTTP, DBURI, und so weiter) und erstellt eine Instanz des Subtyps. (Oracle SQL Language Reference URIFactory Package)

URIFactory enthält die folgenden Unterprogramme:

GETURI

Oracle

SELECT SYS.URIFACTORY.GETURI('http://localhost/').GETURL() FROM dual;
Copy

Ergebnis

SYS.URIFACTORY.GETURI(‚HTTP://LOCALHOST/‘).GETURL()

http://localhost/

Snowflake

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'SYS.URIFACTORY.GETURI' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS GETURI.GETURL() FROM dual;
Copy

ESCAPEURI

Oracle

SELECT SYS.URIFACTORY.ESCAPEURI('http://www.<->') FROM dual;
Copy

Ergebnis

SYS.URIFACTORY.ESCAPEURI(‚HTTP://WWW.<->‘)

http://www.%3C-%3E

Snowflake

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'SYS.URIFACTORY.ESCAPEURI' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS ESCAPEURI
FROM dual;
Copy

UNESCAPEURI

Oracle

SELECT SYS.URIFACTORY.UNESCAPEURI('http://www.%24-%26-%3C-%3E-%3F') FROM dual;
Copy

Ergebnis

SYS.URIFACTORY.UNESCAPEURI(‚HTTP://WWW.%24-%26-%3C-%3E-%3F‘)

http://www.$-&-<->-?

Snowflake

SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'SYS.URIFACTORY.UNESCAPEURI' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS UNESCAPEURI
FROM dual;
Copy

REGISTERURLHANDLER

Oracle

CREATE TABLE url_table (urlcol varchar2(80));
INSERT INTO url_table VALUES ('http://www.google.com/');

CREATE OR REPLACE TYPE SCURIType UNDER SYS.URIType (
  OVERRIDING MEMBER FUNCTION getClob RETURN CLOB,
  OVERRIDING MEMBER FUNCTION getBlob RETURN BLOB,
  OVERRIDING MEMBER FUNCTION getExternalURL RETURN VARCHAR2,
  OVERRIDING MEMBER FUNCTION getURI RETURN VARCHAR2,
  STATIC FUNCTION createURI(url IN VARCHAR2) RETURN SCURIType);
/

CALL URIFACTORY.REGISTERURLHANDLER('sc://','HR','SCURITYPE');

INSERT INTO url_table VALUES ('SC://company1/company2=22/comp');
Copy

Snowflake

CREATE OR REPLACE TABLE url_table (urlcol VARCHAR(80))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

INSERT INTO url_table
VALUES ('http://www.google.com/');

--!!!RESOLVE EWI!!! /*** SSC-EWI-OR0007 - CREATE TYPE SUBTYPE IS NOT SUPPORTED IN SNOWFLAKE ***/!!!

--CREATE OR REPLACE TYPE SCURIType UNDER SYS.URIType (
--  OVERRIDING MEMBER FUNCTION getClob RETURN CLOB,
--  OVERRIDING MEMBER FUNCTION getBlob RETURN BLOB,
--  OVERRIDING MEMBER FUNCTION getExternalURL RETURN VARCHAR2,
--  OVERRIDING MEMBER FUNCTION getURI RETURN VARCHAR2,
--  STATIC FUNCTION createURI(url IN VARCHAR2) RETURN SCURIType)
                                                              ;

CALL URIFACTORY.REGISTERURLHANDLER('sc://','HR','SCURITYPE');

INSERT INTO url_table
VALUES ('SC://company1/company2=22/comp');
Copy

UNREGISTERURLHANDLER

Oracle

CALL URIFACTORY.UNREGISTERURLHANDLER('sc://');
Copy

Snowflake

CALL URIFACTORY.UNREGISTERURLHANDLER('sc://');
Copy

Bekannte Probleme

1. Unterprogramme des URIFactory-Pakets werden nicht erkannt

SnowConvert AI transformiert keine Unterprogramme von integrierten Paketen. Die meisten Funktionalitäten von URI-Typen werden von Snowflake derzeit nicht unterstützt.

2. Fehlende EWIs für URIFactory-Paket

Der Ausgabecode sollte eine EWI anzeigen, der darauf hinweist, dass einige Funktionen von Snowflake nicht unterstützt werden. Es gibt ein Work-Element zur Behebung dieses Problems.

XMLType

Beschreibung

Dieser von Oracle bereitgestellte Typ kann zum Speichern und Abfragen von XML-Daten in der Datenbank verwendet werden. XMLType verfügt über Elementarfunktionen, mit denen Sie auf XML-Daten zugreifen, sie extrahieren und mit XPath-Ausdrücken abfragen können. (Oracle SQL Language Reference XML Data Type)

Snowflake verarbeitet semistrukturierte Daten (einschließlich XMLTYPE) unter Verwendung des Datentyps VARIANT. Aus diesem Grund muss XMLTYPEs auf VARIANT migriert werden, und anschließend müssen die Verwendungen von Funktionen zur Manipulation und Abfrage von XML auf die Gegenstücke von Snowflake migriert werden. Weitere Informationen zur Verwendung von XML in Snowflake finden Sie in diesem Beitrag im Snowflake-Forum und in der Dokumentation zur Funktion TO_XML in Snowflake.

XMLTYPE
Copy

Beispielhafte Quellcode-Muster

XMLType in Create Table

Oracle
CREATE TABLE xml_table(
    xml_column XMLTYPE
);
Copy
Snowflake
CREATE OR REPLACE TABLE xml_table (
        xml_column VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - XMLTYPE DATA TYPE CONVERTED TO VARIANT ***/!!!
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;
Copy

Daten in die XML-Spalte einfügen

Oracle
INSERT INTO xml_table VALUES(
    XMLType(
'<?xml version="1.0"?>  
<note>  
  <to>SnowConvert AI</to>  
  <from>Oracle</from>  
  <heading>Greeting</heading>  
  <body>Hello there!</body>  
</note>')
);
Copy
Snowflake
INSERT INTO xml_table
VALUES(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0016 - FUNCTION RELATED WITH XML NOT SUPPORTED ***/!!!
    XMLType(
'<?xml version="1.0"?>  
<note>  
  <to>SnowConvert AI</to>  
  <from>Oracle</from>  
  <heading>Greeting</heading>  
  <body>Hello there!</body>  
</note>')
);
Copy

Bekannte Probleme

1. XMLType manipulation and query functions are not recognized

Die Funktionen zur Manipulation und Abfrage von XML wie XMLTYPE() werden von SnowConvert weder erkannt noch umgewandelt.

Zugehörige EWIs

  1. SSC-EWI-0036: Datentyp wurde in einen anderen Datentyp konvertiert.

  2. SSC-EWI-OR0016: XML wird nicht unterstützt.

URI-Datentypen

Beschreibung

Oracle stellt eine Familie von URI-Typen – URIType, DBURIType, XDBURIType und HTTPURIType – bereit, die durch eine Vererbungshierarchie verbunden sind. URIType ist ein Objekttyp, während die anderen Untertypen von URIType sind. (Oracle SQL-Sprachreferenz – URI-Datentypen)

DBURIType

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

DBURIType kann verwendet werden, um DBURIRef Werte zu speichern, die auf Daten innerhalb der Datenbank verweisen. Durch das Speichern von DBURIRef Werten können Sie auf Daten verweisen, die innerhalb oder außerhalb der Datenbank gespeichert sind, und konsistent auf die Daten zugreifen. (Oracle SQL Language Reference URI Data Types)

DBURIType

Copy

Beispielhafte Quellcode-Muster

Bemerkung

Informationen zum Einrichten der Beispieldatenbank finden Sie in diesem Abschnitt.

DBURIType in Create Table

Oracle
CREATE TABLE dburitype_table(
    db_uritype_column DBURITYPE,
    sys_db_uritype_column SYS.DBURITYPE
);

INSERT INTO dburitype_table (db_uritype_column) VALUES (
    dburitype.createUri('/HR/EMPLOYEES/ROW[EMPLOYEE_ID=205]/FIRST_NAME ')
);
Copy
Snowflake
CREATE OR REPLACE TABLE dburitype_table (
        db_uritype_column VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'DBURITYPE' USAGE CHANGED TO VARIANT ***/!!!,
        !!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
        sys_db_uritype_column SYS.DBURITYPE
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;

    CREATE OR REPLACE VIEW PUBLIC.dburitype_table_view
    COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
    AS
    SELECT
        db_uritype_column,
        sys_db_uritype_column
    FROM
        dburitype_table;

        INSERT INTO dburitype_table(db_uritype_column) VALUES (
    dburitype.createUri('/HR/EMPLOYEES/ROW[EMPLOYEE_ID=205]/FIRST_NAME ') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'dburitype.createUri' NODE ***/!!!
);
Copy

Abrufen von Daten aus der Spalte DBURIType

Oracle
SELECT dt.db_uritype_column.getclob() FROM dburitype_table dt;
Copy
Ergebnis

DT.DB_URITYPE_COLUMN.GETCLOB()

¶ <FIRST_NAME>Shelley</FIRST_NAME>¶

Diese Abfrage hat die Syntax XML, so wird sie angezeigt:

<?xml version="1.0"?>
 <FIRST_NAME>Shelley</FIRST_NAME>
Copy
Snowflake
SELECT dt.db_uritype_column.getclob() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'dt.db_uritype_column.getclob' NODE ***/!!! FROM
dburitype_table dt;
Copy

Warnung

Die Funktion „getclob“ wird nicht vom Tool umgewandelt, ist aber notwendig, um die Daten in Oracle anzuzeigen. Diese Transformation wird in zukünftigen Versionen verfügbar sein.

Bekannte Probleme

1. DBURIType -Datentyp nicht erkannt

DBURIType wird von SnowConvert AI als benutzerdefinierter Datentyp analysiert und konvertiert oder als nicht unterstützter Typ, wenn dieser das Präfix SYS verwendet. Es gibt ein Work-Element, um dieses Problem zu beheben.

Zugehörige EWIs

  1. SSC-EWI-0028: TYPE nicht unterstützt.

  2. SSC-EWI-0062: Die Verwendung des benutzerdefinierten Typs wurde in den Variant-Typ geändert.

  3. SSC-EWI-0073: Überprüfung auf gleichwertige Funktion ausstehend.

HTTPURIType

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

Sie können HTTPURIType verwenden, um URLs auf externen Webseiten oder in Dateien zu speichern. Oracle greift auf diese Dateien über HTTP (Hypertext Transfer Protocol) zu. (Oracle SQL Language Reference URI Data Types)

HTTPURITYPE

Copy

Beispielhafte Quellcode-Muster

HTTPURIType in Create Table

Oracle
CREATE TABLE httpuritype_table(
    http_uritype_column HTTPURITYPE,
    sys_http_uritype_column SYS.HTTPURITYPE
);

INSERT INTO httpuritype_table (http_uritype_column) VALUES(
    HTTPURITYPE.createuri('http://localhost/')
);
INSERT INTO httpuritype_table (http_uritype_column) VALUES(
    HTTPURITYPE.createuri('www.google.com')
);
Copy
Snowflake
CREATE OR REPLACE TABLE httpuritype_table (
	    http_uritype_column VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'HTTPURITYPE' USAGE CHANGED TO VARIANT ***/!!!,
	    !!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
	    sys_http_uritype_column SYS.HTTPURITYPE
	)
	COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
	;

	CREATE OR REPLACE VIEW PUBLIC.httpuritype_table_view
	COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
	AS
	SELECT
	    http_uritype_column,
	    sys_http_uritype_column
	FROM
	    httpuritype_table;

	    INSERT INTO httpuritype_table(http_uritype_column) VALUES(
    HTTPURITYPE.createuri('http://localhost/') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'HTTPURITYPE.createuri' NODE ***/!!!
);

	    INSERT INTO httpuritype_table(http_uritype_column) VALUES(
    HTTPURITYPE.createuri('www.google.com') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'HTTPURITYPE.createuri' NODE ***/!!!
);
Copy

Abrufen von Daten aus der Spalte HTTPURIType

Oracle
SELECT 
	ut.http_uritype_column.getUrl(),
	ut.http_uritype_column.getExternalUrl()
FROM 
	httpuritype_table ut;
Copy
Ergebnis

UT.HTTP_URITYPE_COLUMN.GETURL()

UT.HTTP_URITYPE_COLUMN.GETEXTERNALURL()

http://localhost/

http://localhost/

http://www.google.com

http://www.google.com

Snowflake
SELECT
	ut.http_uritype_column.getUrl() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'ut.http_uritype_column.getUrl' NODE ***/!!!,
	ut.http_uritype_column.getExternalUrl() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'ut.http_uritype_column.getExternalUrl' NODE ***/!!!
FROM
	httpuritype_table ut;
Copy

Warnung

Die Funktionen getUrl und getExternalUrl werden vom Tool nicht umgewandelt, sind aber notwendig, um die Daten in Oracle anzuzeigen. Diese Transformation wird in zukünftigen Versionen verfügbar sein.

Bekannte Probleme

1. HTTPURIType -Datentyp nicht erkannt

HTTPURIType wird von SnowConvert AI als benutzerdefinierter Datentyp analysiert und konvertiert oder als nicht unterstützter Typ, wenn dieser das Präfix SYS verwendet. Es gibt ein Work-Element, um dieses Problem zu beheben.

Zugehörige EWIs

  1. SSC-EWI-0028: TYPE nicht unterstützt.

  2. SSC-EWI-0062: Die Verwendung des benutzerdefinierten Typs wurde in den Variant-Typ geändert.

  3. SSC-EWI-0073: Überprüfung auf gleichwertige Funktion ausstehend.

XDBURIType

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

Sie können XDBURIType verwenden, um Dokumente in der XML-Datenbankhierarchie als URIs darzustellen, die in jede URIType-Spalte in einer Tabelle eingebettet werden können. XDBURIType besteht aus einer URL, die den hierarchischen Namen des XML-Dokuments, auf das er verweist, und ein optionales Fragment enthält, das die XPath-Syntax darstellt. (Oracle SQL Language Reference URI Data Types)

XDBURITYPE

Copy

Beispielhafte Quellcode-Muster

XDBURIType in Create Table

Oracle
CREATE TABLE xdburitype_table(
    xdb_uritype_column XDBURITYPE,
    sys_xdb_uritype_column SYS.XDBURITYPE
);

INSERT INTO xdburitype_table (xdb_uritype_column) VALUES(
    xdburitype('/home/OE/employees/emp_selby.xml')
);
Copy
Snowflake
CREATE OR REPLACE TABLE xdburitype_table (
        xdb_uritype_column VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'XDBURITYPE' USAGE CHANGED TO VARIANT ***/!!!,
        !!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
        sys_xdb_uritype_column SYS.XDBURITYPE
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;

    CREATE OR REPLACE VIEW PUBLIC.xdburitype_table_view
    COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "" }}'
    AS
    SELECT
        xdb_uritype_column,
        sys_xdb_uritype_column
    FROM
        xdburitype_table;

        INSERT INTO xdburitype_table(xdb_uritype_column) VALUES(
    xdburitype('/home/OE/employees/emp_selby.xml') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'xdburitype' NODE ***/!!!
);
Copy

Abrufen von Daten aus der Spalte XDBURIType

Oracle
SELECT ut.xdb_uritype_column.getclob() FROM xdburitype_table ut;
Copy
Ergebnis

UT.XDB_URITYPE_COLUMN.GETCLOB()

<emp_name>selby</emp_name>

Diese Abfrage hat die Syntax XML, so wird sie angezeigt:

<emp_name>selby</emp_name>
Copy
Snowflake
SELECT ut.xdb_uritype_column.getclob() !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'ut.xdb_uritype_column.getclob' NODE ***/!!! FROM
xdburitype_table ut;
Copy

Warnung

Die Funktion „getclob“ wird nicht vom Tool umgewandelt, ist aber notwendig, um die Daten in Oracle anzuzeigen. Diese Transformation wird in zukünftigen Versionen verfügbar sein.

Bekannte Probleme

1. XDBURIType -Datentyp nicht erkannt

XDBURIType wird von SnowConvert AI als benutzerdefinierter Datentyp analysiert und konvertiert oder als nicht unterstützter Typ, wenn dieser das Präfix SYS verwendet. Es gibt ein Work-Element, um dieses Problem zu beheben.

Zugehörige EWIs

  1. SSC-EWI-0028: TYPE nicht unterstützt.

  2. SSC-EWI-0062: Die Verwendung des benutzerdefinierten Typs wurde in den Variant-Typ geändert.

  3. SSC-EWI-0073: Überprüfung auf gleichwertige Funktion ausstehend.