SnowConvert: Allgemeine Probleme¶
SSC-EWI-0003¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieses Problem tritt auf, wenn beim Ausführen einer Konvertierungsregel für einen bestimmten SQL-Knoten im Quellcode ein Fehler auftritt.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0052¶
Schweregrad¶
Medium
Beschreibung¶
Dieser Fehler tritt auf, wenn das Konvertierungstool einen Parameter oder eine Variable im Quellcode nicht erkennt oder nicht unterstützt.
Beispielcode¶
Eingabecode (Oracle):¶
-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE PROCEDURE_PARAMETERS(PARAM SDO_GEOMETRY)
AS
VARIABLE SDO_GEOMETRY;
BEGIN
VARIABLE := PARAM;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE PROCEDURE_PARAMETERS (PARAM GEOMETRY)
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
// REGION SnowConvert Helpers Code
var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
var fixBind = function (arg) {
arg = arg instanceof Date ? formatDate(arg) : IS_NULL(arg) ? null : arg;
return arg;
};
var SQL = {
FOUND : false,
NOTFOUND : false,
ROWCOUNT : 0,
ISOPEN : false
};
var _RS, _ROWS, SQLERRM = "normal, successful completion", SQLCODE = 0;
var getObj = (_rs) => Object.assign(new Object(),_rs);
var getRow = (_rs) => (values = Object.values(_rs)) && (values = values.splice(-1 * _rs.getColumnCount())) && values;
var fetch = (_RS,_ROWS,fmode) => _RS.getRowCount() && _ROWS.next() && (fmode ? getObj : getRow)(_ROWS) || (fmode ? new Object() : []);
var EXEC = function (stmt,binds,opts) {
try {
binds = !(arguments[1] instanceof Array) && ((opts = arguments[1]) && []) || (binds || []);
opts = opts || new Object();
binds = binds ? binds.map(fixBind) : binds;
_RS = snowflake.createStatement({
sqlText : stmt,
binds : binds
});
_ROWS = _RS.execute();
if (opts.sql !== 0) {
var isSelect = stmt.toUpperCase().trimStart().startsWith("SELECT");
var affectedRows = isSelect ? _RS.getRowCount() : _RS.getNumRowsAffected();
SQL.FOUND = affectedRows != 0;
SQL.NOTFOUND = affectedRows == 0;
SQL.ROWCOUNT = affectedRows;
}
if (opts.row === 2) {
return _ROWS;
}
var INTO = function (opts) {
if (opts.vars == 1 && _RS.getColumnCount() == 1 && _ROWS.next()) {
return _ROWS.getColumnValue(1);
}
if (opts.rec instanceof Object && _ROWS.next()) {
var recordKeys = Object.keys(opts.rec);
Object.assign(opts.rec,Object.fromEntries(new Map(getRow(_ROWS).map((element,Index) => [recordKeys[Index],element]))))
return opts.rec;
}
return fetch(_RS,_ROWS,opts.row);
};
var BULK_INTO_COLLECTION = function (into) {
for(let i = 0;i < _RS.getRowCount();i++) {
FETCH_INTO_COLLECTIONS(into,fetch(_RS,_ROWS,opts.row));
}
return into;
};
if (_ROWS.getRowCount() > 0) {
return _ROWS.getRowCount() == 1 ? INTO(opts) : BULK_INTO_COLLECTION(opts);
}
} catch(error) {
RAISE(error.code,error.name,error.message)
}
};
var RAISE = function (code,name,message) {
message === undefined && ([name,message] = [message,name])
var error = new Error(message);
error.name = name
SQLERRM = `${(SQLCODE = (error.code = code))}: ${message}`
throw error;
};
var FETCH_INTO_COLLECTIONS = function (collections,fetchValues) {
for(let i = 0;i < collections.length;i++) {
collections[i].push(fetchValues[i]);
}
};
var IS_NULL = (arg) => !(arg || arg === 0);
// END REGION
let VARIABLE = new SDO_GEOMETRY();
VARIABLE =
!!!RESOLVE EWI!!! /*** SSC-EWI-0052 - UNUSABLE OBJECT PARAM, ITS DATATYPE WAS NOT TRANSFORMED ***/!!!
PARAM;
$$;
Empfehlungen¶
Erwägen Sie die Verwendung eines anderen Datentyps, der Ihren Anforderungen besser entspricht.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0066¶
Schweregrad ¶
Hoch
Beschreibung ¶
Dieser Fehler gibt an, dass ein bestimmter Ausdruck nicht mit Snowflake kompatibel ist oder nicht von Snowflake unterstützt wird.
Beispielcode ¶
Eingabecode:¶
SELECT * from T1 where (cast('2016-03-17' as DATE),
cast('2016-03-21' as DATE)) OVERLAPS
(cast('2016-03-20' as DATE), cast('2016-03-22' as DATE));
Ausgabecode:¶
SELECT * from
T1
where
!!!RESOLVE EWI!!! /*** SSC-EWI-0066 - EXPRESSION 'OVERLAPS' IS NOT SUPPORTED IN SNOWFLAKE. ***/!!! (cast('2016-03-17' as DATE),
cast('2016-03-21' as DATE)) OVERLAPS
(cast('2016-03-20' as DATE), cast('2016-03-22' as DATE));
Empfehlungen ¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0027¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung zeigt an, dass eine Anweisung nicht ausgeführt werden kann, weil sie eine ungültige Abfrage aufgrund eines falschen Variablen- oder Literalwerts enthält.
Beispielcode¶
Eingabecode:¶
REPLACE PROCEDURE TEST.COLLECT_STATS ()
BEGIN
COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);
SET STATS_STATEMENT = 'COLLECT STATS ON ' || OUT_DB || '.' || OUT_TBL || ' COLUMN(' || C4.ColumnName || ');';
EXECUTE IMMEDIATE STATS_STATEMENT;
EXECUTE IMMEDIATE 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);';
SET STATS_STATEMENT_NOT_DYNAMIC = 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);';
EXECUTE IMMEDIATE STATS_STATEMENT_NOT_DYNAMIC;
END;
;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE TEST.COLLECT_STATS ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
-- --** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. COLLECT **
-- COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME);
STATS_STATEMENT := 'COLLECT STATS ON ' || OUT_DB || '.' || OUT_TBL || ' COLUMN(' || C4.ColumnName || ')';
!!!RESOLVE EWI!!! /*** SSC-EWI-0027 - THE FOLLOWING STATEMENT USES A VARIABLE/LITERAL WITH AN INVALID QUERY AND IT WILL NOT BE EXECUTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE STATS_STATEMENT;
!!!RESOLVE EWI!!! /*** SSC-EWI-0027 - THE FOLLOWING STATEMENT USES A VARIABLE/LITERAL WITH AN INVALID QUERY AND IT WILL NOT BE EXECUTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME)';
STATS_STATEMENT_NOT_DYNAMIC := 'COLLECT STATS ON DBC.AccessRights COLUMN(COLNAME)';
!!!RESOLVE EWI!!! /*** SSC-EWI-0027 - THE FOLLOWING STATEMENT USES A VARIABLE/LITERAL WITH AN INVALID QUERY AND IT WILL NOT BE EXECUTED ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE STATS_STATEMENT_NOT_DYNAMIC;
END;
$$;
Empfehlungen¶
Überprüfen Sie, ob Sie die Werte explizit in das Format „Datum“, „Uhrzeit“ oder „Zeitstempel“ konvertieren müssen. In vielen Fällen konvertiert Snowflake diese Werte automatisch, sodass eine explizite Konvertierung nicht erforderlich ist.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0102¶
Schweregrad¶
Niedrig
Beschreibung¶
Wenn Snowflake-Anweisungen durch Konvertierungsregeln verarbeitet werden, können bestimmte Optionen im Ausgabecode weggelassen werden. Die resultierende Funktionalität bleibt jedoch dieselbe wie der ursprüngliche Code.
Beispielcode¶
Eingabecode (PostgreSQL):¶
-- Case 1:
TRUNCATE ONLY table_base2 RESTART IDENTITY CASCADE;
-- Case 2:
TRUNCATE TABLE table_inherit_and_generated RESTART IDENTITY CASCADE;
Ausgabecode:¶
-- Case 1:
!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED ONLY OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED CASCADE OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED RESTART IDENTITY OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!
TRUNCATE table_base2;
-- Case 2:
!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED CASCADE OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0102 - REMOVED RESTART IDENTITY OPTION FROM CODE, ALREADY HANDLED IN CONVERSION TO SNOWFLAKE ***/!!!
TRUNCATE TABLE table_inherit_and_generated;
Empfehlungen¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0013¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieser Fehler tritt auf, wenn das System bei der Konvertierung von Code aus dem Quellformat auf ein Problem stößt.
Empfehlung¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0033¶
Teile des Ausgabecodes wurden entfernt, um ihn leichter verständlich zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn der Quellcode keine Spalte enthält, die mit einer _ CAST _-Funktion in einem bestimmten Ausgabeformat konvertiert wird.
Beispielcode¶
Eingabecode (Teradata):¶
CREATE VIEW SampleView AS
SELECT
DAY_DATE(FORMAT 'MMM-YYYY')(CHAR(8))
FROM
SampleTable;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
CREATE OR REPLACE VIEW SampleView
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
CAST(RPAD(TO_VARCHAR(
DAY_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-0033 - FORMAT 'MMM-YYYY' REMOVED, SEMANTIC INFORMATION NOT FOUND. ***/!!!), 8) AS CHAR(8))
FROM
SampleTable;
Empfehlungen¶
Überprüfen Sie, ob alle erforderlichen Tabellen und Ansichten, die von der Prozeduranweisung referenziert werden, erfolgreich migriert wurden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0062¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Meldung erscheint, wenn ein benutzerdefinierter Typ referenziert und später geändert wird, um einen abweichenden Datentyp zu verwenden.
Diese Meldung steht in engem Zusammenhang mit dem Fehlercode SSC-EWI-0056.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE TYPE type1 AS OBJECT(type1_column1 INT);
CREATE TABLE table1
(
column1 type1
);
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT(type1_column1 INT)
;
CREATE OR REPLACE TABLE table1
(
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'type1' USAGE CHANGED TO VARIANT ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW PUBLIC.table1_view
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "" }}'
AS
SELECT
column1:type1_column1 :: INTEGER AS type1_column1
FROM
table1;
Empfehlungen¶
Stellen Sie sicher, dass Sie alle Eingabedaten in einen mit Variant kompatiblen Datentyp konvertieren.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com.
SSC-EWI-0056¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Meldung erscheint, wenn ein benutzerdefinierter Typ, der umgewandelt werden kann, erkannt wird. Sie liefert Feedback zu den benutzerdefinierten Typen, die kommentiert werden.
Die Typdefinition hat einen Kommentar, wird aber trotzdem zur Auflösung von Referenzen verwendet. Weitere Einzelheiten finden Sie unter SSC-EWI-0062.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE TYPE type1 AS OBJECT (column1 INT);
CREATE OR REPLACE PROCEDURE record_procedure
IS
TYPE record_typ IS RECORD(col1 INTEGER, col2 FLOAT);
BEGIN
NULL;
END;
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO VARIANT ***/!!!
CREATE TYPE type1 AS OBJECT (column1 INT)
;
CREATE OR REPLACE PROCEDURE record_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
!!!RESOLVE EWI!!! /*** SSC-EWI-0056 - CUSTOM TYPES ARE NOT SUPPORTED IN SNOWFLAKE BUT REFERENCES TO THIS CUSTOM TYPE WERE CHANGED TO OBJECT ***/!!!
TYPE record_typ IS RECORD(col1 INTEGER, col2 FLOAT);
BEGIN
NULL;
END;
$$;
Empfehlungen¶
Endbenutzer müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0007¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieser Fehler tritt auf, wenn es ein Problem beim Schreiben in die Ausgabedatei gibt.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0046¶
Schweregrad¶
Kritisch
Beschreibung¶
Snowflake erlaubt es Ihnen nicht, Funktionen oder Prozeduren innerhalb anderer Funktionen oder Prozeduren zu erstellen (verschachtelte Deklarationen). Wenn SnowConvert verschachtelte Deklarationen in einer CREATE FUNCTION- oder CREATE PROCEDURE-Anweisung entdeckt, erzeugt es eine Warnmeldung.
Codebeispiel¶
Eingabe¶
CREATE OR REPLACE FUNCTION myFunction
RETURN INTEGER
IS
total_count INTEGER;
-- Function Declaration
FUNCTION function_declaration(param1 VARCHAR) RETURN INTEGER;
FUNCTION function_definition
RETURN INTEGER
IS
count INTEGER;
PROCEDURE procedure_declaration(param1 INTEGER)
IS
BEGIN
NULL;
END;
BEGIN
RETURN count;
end;
BEGIN
-- Your logic to calculate the total employee count goes here
RETURN total_count;
END;
Ausgabe¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0046 - NESTED FUNCTION/PROCEDURE DECLARATIONS ARE NOT SUPPORTED IN SNOWFLAKE. ***/!!!
CREATE OR REPLACE FUNCTION myFunction ()
RETURNS FLOAT
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/16/2024", "domain": "test" }}'
AS
$$
let TOTAL_COUNT;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED ***/!!!
/* -- Function Declaration
FUNCTION function_declaration(param1 VARCHAR) RETURN INTEGER; */
// Function Declaration
;
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0057 - TRANSFORMATION FOR NESTED PROCEDURE OR FUNCTION IS NOT SUPPORTED ***/!!!
/* FUNCTION function_definition
RETURN INTEGER
IS
count INTEGER;
PROCEDURE procedure_declaration(param1 INTEGER)
IS
BEGIN
NULL;
END;
BEGIN
RETURN count;
end; */
;
// Your logic to calculate the total employee count goes here
return TOTAL_COUNT;
$$;
Empfehlungen¶
Verschieben Sie alle verschachtelten Deklarationen an eine Position außerhalb der Funktion oder Prozedur.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0023¶
Die EWI (External Web Interface) wird ausschließlich bei der Übersetzung gespeicherter Prozeduren in JavaScript erzeugt. Dieses Feature wird jedoch nicht mehr empfohlen, da Snowflake Scripting jetzt die bevorzugte Sprache für gespeicherte Prozeduren ist.
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung weist auf mögliche Auswirkungen auf die Leistung hin, die Benutzer berücksichtigen sollten.
Beispielcode¶
Eingabecode:¶
-- Additional Params: -t javascript
REPLACE PROCEDURE Database1.Proc1()
BEGIN
DECLARE lNumber INTEGER DEFAULT 1;
FOR class1 AS class2 CURSOR FOR
SELECT COL0,
TRIM(COL1) AS COL1ALIAS,
TRIM(COL2),
COL3
FROM someDb.prefixCol
DO
INSERT INTO TempDB.Table1 (:lgNumber, :lNumber, (',' || :class1.ClassCD || '_Ind CHAR(1) NOT NULL'));
SET lNumber = lNumber + 1;
END FOR;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE Database1.Proc1 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
var LNUMBER = 1;
/*** SSC-EWI-0023 - PERFORMANCE REVIEW - THIS LOOP CONTAINS AN INSERT, DELETE OR UPDATE STATEMENT ***/
for(var CLASS2 = new CURSOR(`SELECT
COL0,
TRIM(COL1) AS COL1ALIAS,
TRIM(COL2),
COL3
FROM
someDb.prefixCol`,[],false).OPEN();CLASS2.NEXT();) {
let CLASS1 = CLASS2.CURRENT;
EXEC(`INSERT INTO TempDB.Table1
VALUES (:lgNumber, :1, (',' || :
!!!RESOLVE EWI!!! /*** SSC-EWI-0026 - THE VARIABLE class1.ClassCD MAY REQUIRE A CAST TO DATE, TIME OR TIMESTAMP ***/!!!
:2 || '_Ind CHAR(1) NOT NULL'))`,[LNUMBER,CLASS1.CLASSCD]);
LNUMBER = LNUMBER + 1;
}
CLASS2.CLOSE();
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0107¶
Schweregrad¶
Hoch
Beschreibung¶
Intervalle in Snowflake können nur für mathematische Berechnungen verwendet werden. Die Verwendung von Intervallen für andere Zwecke wird nicht unterstützt.
Beispielcode ¶
Eingabecode:
SELECT INTERVAL '1-5' YEAR TO MONTH FROM DUAL;
Ausgabecode:
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0107 - INTERVAL LITERAL IS NOT SUPPORTED BY SNOWFLAKE IN THIS SCENARIO ***/!!!
INTERVAL '1-5' YEAR TO MONTH FROM DUAL;
Empfehlungen ¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0073¶
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn SnowConvert auf eine Grammatikstruktur in der Quellplattform stößt, die von unserem Entwicklungsteam nicht auf Snowflake-Kompatibilität geprüft wurde. Der Code wird nicht transformiert, was bedeutet, dass er möglicherweise manuell überprüft und geändert werden muss, damit er in Snowflake richtig funktioniert.
Beispielcode¶
SQLServer:¶
CREATE OR ALTER PROC SampleProcedure
AS
BEGIN
INSERT INTO aTable (columnA = 'varcharValue', columnB = 1);
INSERT exampleTable VALUES ('Hello', 23);
INSERT INTO exampleTable DEFAULT VALUES;
END
CREATE OR REPLACE PROCEDURE SampleProcedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
INSERT INTO aTable (columnA = 'varcharValue', columnB = 1);
INSERT INTO exampleTable VALUES ('Hello', 23);
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'INSERT WITH DEFAULT VALUES' NODE ***/!!!
INSERT INTO exampleTable DEFAULT VALUES;
END;
$$;
Zeile 6 des Eingabecodes enthält die INSERT
-Anweisung mit DEFAULT VALUES
. Diese Syntax wird derzeit von SnowConvert nicht unterstützt, weshalb in den Zeilen 11 und 12 eine EWI-Meldung (Error, Warning, Information) erscheint.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0022¶
Die EWI (External Web Interface) wird ausschließlich bei der Übersetzung gespeicherter Prozeduren in JavaScript erzeugt. Dieses Feature wird jedoch nicht mehr empfohlen, da Snowflake Scripting jetzt die bevorzugte Sprache für gespeicherte Prozeduren ist.
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Medium
Beschreibung¶
Dieser Fehler zeigt an, dass bestimmte Bezeichner in einer Anweisung vom System automatisch als Parameter behandelt werden.
Beispielcode¶
Eingabecode:¶
-- Additional Params: -t javascript
CREATE MACRO SAME_MACRO_COLUMN_AND_PARAMATERS (
LOAD_USER_ID (VARCHAR (32), CHARACTER SET LATIN),
UPDATE_USER_ID (VARCHAR (32), CHARACTER SET LATIN)
) AS (
UPDATE TABLE1 SET LOAD_USER_ID = :LOAD_USER_ID, UPDATE_USER_ID = :UPDATE_USER_ID;
INSERT INTO TABLE1 (LOAD_USER_ID, UPDATE_USER_ID) VALUES (:LOAD_USER_ID, :UPDATE_USER_ID);
DELETE FROM TABLE1 WHERE :LOAD_USER_ID = LOAD_USER_ID;
);
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE SAME_MACRO_COLUMN_AND_PARAMATERS (LOAD_USER_ID VARCHAR (32), UPDATE_USER_ID VARCHAR (32))
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "12/16/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
EXEC(`UPDATE TABLE1
SET
LOAD_USER_ID = :1,
UPDATE_USER_ID = :2`,[LOAD_USER_ID,UPDATE_USER_ID]);
// ** SSC-EWI-0022 - ONE OR MORE IDENTIFIERS IN THIS STATEMENT WERE CONSIDERED PARAMETERS BY DEFAULT. REFERENCED TABLE NOT FOUND. **
EXEC(`INSERT INTO TABLE1 (LOAD_USER_ID, UPDATE_USER_ID)
VALUES (:1, :2)`,[LOAD_USER_ID,UPDATE_USER_ID]);
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'Delete' NODE ***/!!!
//DELETE FROM
// TABLE1
//WHERE
// RTRIM(:LOAD_USER_ID) = RTRIM(LOAD_USER_ID)
null
$$;
Empfehlungen¶
Überprüfen Sie, ob alle erforderlichen Tabellen und Ansichten, die von der Prozeduranweisung referenziert werden, erfolgreich migriert wurden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0080¶
Schweregrad ¶
Niedrig
Beschreibung ¶
Diese Warnung erscheint, wenn Ihr Quellcode einen BINARY-Datentyp mit einem Standardwert enthält, der von Snowflake-SQL nicht unterstützt wird.
Beispielcode ¶
Eingabecode (SQL Server):
create table test1345
(
key1 binary default 0
);
Ausgabecode:
CREATE OR REPLACE TABLE test1345
(
key1 BINARY
!!!RESOLVE EWI!!! /*** SSC-EWI-0080 - DEFAULT VALUE IS NOT ALLOWED ON BINARY COLUMNS ***/!!!
default 0
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
;
Empfehlungen ¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0002¶
Schweregrad¶
Moderat
Beschreibung¶
Standardparameter müssen in Snowflake am Ende der Parameterliste stehen. Sie müssen alle Parameter mit Standardwerten neu anordnen, um sicherzustellen, dass sie in den Parameterdeklarationen als letzte angegeben werden.
Beispielcode¶
Eingabecode:¶
CREATE PROCEDURE MySampleProc
@Param1 NVARCHAR(50) = NULL,
@Param2 NVARCHAR(10),
@Param3 NVARCHAR(10) = NULL,
@Param4 NVARCHAR(10)
AS
SELECT 1;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE MySampleProc
!!!RESOLVE EWI!!! /*** SSC-EWI-0002 - DEFAULT PARAMETERS MAY NEED TO BE REORDERED. SNOWFLAKE ONLY SUPPORTS DEFAULT PARAMETERS AT THE END OF THE PARAMETERS DECLARATIONS ***/!!!
(PARAM1 STRING DEFAULT NULL, PARAM2 STRING, PARAM3 STRING DEFAULT NULL, PARAM4 STRING)
RETURNS TABLE()
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
ProcedureResultSet RESULTSET;
BEGIN
ProcedureResultSet := (
SELECT 1);
RETURN TABLE(ProcedureResultSet);
END;
$$;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0053¶
Schweregrad¶
Niedrig
Beschreibung¶
Dieser Fehler tritt auf, wenn das Konvertierungstool nicht in der Lage ist, den Datentyp einer Variablen zu identifizieren. Dies geschieht in der Regel, wenn eine Variable im Code nicht richtig deklariert wurde.
Beispielcode¶
Eingabecode (Oracle):¶
-- Additional Params: -t javascript
CREATE OR REPLACE PROCEDURE PROCEDURE_VARIABLES
AS
VARIABLE INTEGER;
BEGIN
VARIABLE := ANOTHER_VARIABLE;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE PROCEDURE_VARIABLES ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
// REGION SnowConvert Helpers Code
var formatDate = (arg) => (new Date(arg - (arg.getTimezoneOffset() * 60000))).toISOString().slice(0,-1);
var fixBind = function (arg) {
arg = arg instanceof Date ? formatDate(arg) : IS_NULL(arg) ? null : arg;
return arg;
};
var SQL = {
FOUND : false,
NOTFOUND : false,
ROWCOUNT : 0,
ISOPEN : false
};
var _RS, _ROWS, SQLERRM = "normal, successful completion", SQLCODE = 0;
var getObj = (_rs) => Object.assign(new Object(),_rs);
var getRow = (_rs) => (values = Object.values(_rs)) && (values = values.splice(-1 * _rs.getColumnCount())) && values;
var fetch = (_RS,_ROWS,fmode) => _RS.getRowCount() && _ROWS.next() && (fmode ? getObj : getRow)(_ROWS) || (fmode ? new Object() : []);
var EXEC = function (stmt,binds,opts) {
try {
binds = !(arguments[1] instanceof Array) && ((opts = arguments[1]) && []) || (binds || []);
opts = opts || new Object();
binds = binds ? binds.map(fixBind) : binds;
_RS = snowflake.createStatement({
sqlText : stmt,
binds : binds
});
_ROWS = _RS.execute();
if (opts.sql !== 0) {
var isSelect = stmt.toUpperCase().trimStart().startsWith("SELECT");
var affectedRows = isSelect ? _RS.getRowCount() : _RS.getNumRowsAffected();
SQL.FOUND = affectedRows != 0;
SQL.NOTFOUND = affectedRows == 0;
SQL.ROWCOUNT = affectedRows;
}
if (opts.row === 2) {
return _ROWS;
}
var INTO = function (opts) {
if (opts.vars == 1 && _RS.getColumnCount() == 1 && _ROWS.next()) {
return _ROWS.getColumnValue(1);
}
if (opts.rec instanceof Object && _ROWS.next()) {
var recordKeys = Object.keys(opts.rec);
Object.assign(opts.rec,Object.fromEntries(new Map(getRow(_ROWS).map((element,Index) => [recordKeys[Index],element]))))
return opts.rec;
}
return fetch(_RS,_ROWS,opts.row);
};
var BULK_INTO_COLLECTION = function (into) {
for(let i = 0;i < _RS.getRowCount();i++) {
FETCH_INTO_COLLECTIONS(into,fetch(_RS,_ROWS,opts.row));
}
return into;
};
if (_ROWS.getRowCount() > 0) {
return _ROWS.getRowCount() == 1 ? INTO(opts) : BULK_INTO_COLLECTION(opts);
}
} catch(error) {
RAISE(error.code,error.name,error.message)
}
};
var RAISE = function (code,name,message) {
message === undefined && ([name,message] = [message,name])
var error = new Error(message);
error.name = name
SQLERRM = `${(SQLCODE = (error.code = code))}: ${message}`
throw error;
};
var FETCH_INTO_COLLECTIONS = function (collections,fetchValues) {
for(let i = 0;i < collections.length;i++) {
collections[i].push(fetchValues[i]);
}
};
var IS_NULL = (arg) => !(arg || arg === 0);
// END REGION
let VARIABLE;
VARIABLE =
!!!RESOLVE EWI!!! /*** SSC-EWI-0053 - OBJECT ANOTHER_VARIABLE MAY NOT WORK PROPERLY, ITS DATATYPE WAS NOT RECOGNIZED ***/!!!
ANOTHER_VARIABLE;
$$;
Empfehlungen¶
Überprüfen Sie, ob alle Variablen in Ihrem Code richtig deklariert sind.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0094¶
Schweregrad¶
Niedrig
Beschreibung¶
Snowflake Scripting unterstützt derzeit keine LABEL-Deklarationen. Das System fügt eine EWI-Meldung (Error, Warning, Information) hinzu und kommentiert die Beschriftung aus.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE OR REPLACE PROCEDURE Example ( grade NUMBER )
IS
BEGIN
<<CASE1>><<CASE2>>
CASE grade
WHEN 10 THEN NULL;
ELSE NULL;
END CASE CASE1;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE Example (grade NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0094 - LABEL DECLARATION FOR A STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING <<CASE1>><<CASE2>> ***/!!!
CASE :grade
WHEN 10 THEN
NULL;
ELSE NULL;
END CASE;
END;
$$;
Empfehlungen¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0067¶
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler tritt auf, wenn eine benutzerdefinierte Funktion (UDF) innerhalb einer Abfrage entdeckt wird. Oracle-UDFs, UDFs innerhalb von Paketen und bestimmte SQL Server-UDFs werden in gespeicherte Snowflake-Prozeduren konvertiert. Gespeicherte Snowflake-Prozeduren können jedoch nicht direkt aus einer Abfrage heraus aufgerufen werden.
Die ursprüngliche Funktion wird in eine gespeicherte Prozedur konvertiert, um die gleiche Funktionalität zu erhalten. Eine entsprechende leere benutzerdefinierte Snowflake-Funktion (UDF) wird erstellt, um den Funktionsaufruf zu behandeln.
Diese EWI-Meldung (Error, Warning, Information) ist direkt mit SSC-EWI-0068 verknüpft.
Beispielcode¶
SQL Server:¶
CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
DECLARE @i int = 0, @p int;
Select @p = COUNT(*) FROM PURCHASING.VENDOR
WHILE (@p < 1000)
BEGIN
SET @i = @i + 1
SET @p = @p + @i
END
IF (@i = 6)
RETURN 1
RETURN @p
END;
GO
SELECT PURCHASING.FOO() AS RESULT;
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
I INT := 0;
P INT;
BEGIN
Select
COUNT(*)
INTO
:P
FROM
PURCHASING.VENDOR;
WHILE (:P < 1000) LOOP
I := :I + 1;
P := :P + :I;
END LOOP;
IF ((:I = 6)) THEN
RETURN 1;
END IF;
RETURN :P;
END;
$$;
SELECT
PURCHASING.FOO() !!!RESOLVE EWI!!! /*** SSC-EWI-0067 - UDF WAS TRANSFORMED TO SNOWFLAKE PROCEDURE, CALLING PROCEDURES INSIDE QUERIES IS NOT SUPPORTED ***/!!! AS RESULT;
Oracle:¶
CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO var1, var2, var3
FROM employees
START WITH manager_ID = param1
CONNECT BY manager_ID = PRIOR employee_id;
RETURN var1;
EXCEPTION
WHEN no_data_found THEN RETURN param1;
END employee_function;
SELECT employee_function(2) FROM employees;
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "11/14/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
var1 employees.employee_ID%TYPE;
var2 employees.manager_ID%TYPE;
var3 employees.title%TYPE;
BEGIN
SELECT employee_ID, manager_ID, title
INTO
:var1,
:var2,
:var3
FROM
employees
START WITH manager_ID = :param1
CONNECT BY
manager_ID = PRIOR employee_id;
RETURN :var1;
EXCEPTION
WHEN no_data_found THEN
RETURN :param1;
END;
$$;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0067 - UDF WAS TRANSFORMED TO SNOWFLAKE PROCEDURE, CALLING PROCEDURES INSIDE QUERIES IS NOT SUPPORTED ***/!!! employee_function(2) FROM
employees;
Empfehlungen¶
Ihr Quellcode muss möglicherweise umstrukturiert werden, um ihn an die benutzerdefinierten Funktionen von Snowflake anzupassen (UDFs). Erfahren Sie mehr über UDFs in der Snowflake-Dokumentation.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0036¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn ein Datentyp in einen anderen Datentyp konvertiert wird.
Beispielcode¶
Quellcode:¶
CREATE TABLE SampleTable (
SampleYear INTERVAL YEAR(2),
SampleMonth INTERVAL MONTH(2)
);
Konvertierter Code:¶
CREATE OR REPLACE TABLE SampleTable (
SampleYear VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR(2) DATA TYPE CONVERTED TO VARCHAR ***/!!!,
SampleMonth VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH(2) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/23/2024" }}'
;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0026¶
Die EWI (External Web Interface) wird ausschließlich bei der Übersetzung gespeicherter Prozeduren in JavaScript erzeugt. Dieses Feature wird jedoch nicht mehr empfohlen, da Snowflake Scripting jetzt die bevorzugte Sprache für gespeicherte Prozeduren ist.
Teile des Ausgabecodes wurden entfernt, um ihn leichter verständlich zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn eine Abfrage eine Variable mit einem qualifizierten Element enthält, z. B. einen Oracle-Datensatz oder eine Teradata-Schleifenvariable. Je nach Verwendung und Werttyp müssen Sie möglicherweise eine Typumwandlung hinzufügen, um sicherzustellen, dass die Variable korrekt funktioniert.
Beispielcode¶
Eingabecode:¶
CREATE TABLE TABLE1 (COL1 DATE);
CREATE TABLE TABLE2 (COL1 VARCHAR(25));
CREATE OR REPLACE PROCEDURE EXAMPLE
IS
CURSOR C1 IS SELECT * FROM TABLE1;
BEGIN
FOR REC1 IN C1 LOOP
insert into TABLE2 values (TO_CHAR(REC1.COL1, 'DD-MM-YYYY'));
END LOOP;
END;
Ausgabecode:¶
-- Additional Params: -t javascript
CREATE OR REPLACE TABLE TABLE1 (COL1 TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE TABLE TABLE2 (COL1 VARCHAR(25))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE PROCEDURE EXAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
let C1 = new CURSOR(`SELECT * FROM
TABLE1`,() => []);
C1.OPEN();
// ** SSC-EWI-0023 - PERFORMANCE REVIEW - THIS LOOP CONTAINS AN INSERT, DELETE OR UPDATE STATEMENT **
while ( C1.NEXT() ) {
let REC1 = C1.CURRENT;
EXEC(`insert into TABLE2
values (TO_CHAR(
!!!RESOLVE EWI!!! /*** SSC-EWI-0026 - THE VARIABLE REC1.COL1 MAY REQUIRE A CAST TO DATE, TIME OR TIMESTAMP ***/!!!
?, 'DD-MM-YYYY'))`,[REC1.COL1]);
}
C1.CLOSE();
$$;
Ausgabecode mit Anpassungen:¶
CREATE OR REPLACE TABLE TABLE1 (COL1 TIMESTAMP
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE TABLE TABLE2 (COL1 VARCHAR(25))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE PROCEDURE EXAMPLE ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
let C1 = new CURSOR(`SELECT * FROM
TABLE1`,() => []);
C1.OPEN();
// ** SSC-EWI-0023 - PERFORMANCE REVIEW - THIS LOOP CONTAINS AN INSERT, DELETE OR UPDATE STATEMENT **
while ( C1.NEXT() ) {
let REC1 = C1.CURRENT;
EXEC(`insert into TABLE2
values (TO_CHAR(REC1.COL1::DATE, 'DD-MM-YYYY'))`,[REC1.COL1]);
}
C1.CLOSE();
$$;
Empfehlungen¶
Bevor Sie eine Umwandlung in Datums-, Zeit- oder Zeitstempel-Datentypen anwenden, überprüfen Sie, ob sie tatsächlich benötigt wird. Snowflake führt für diese Datentypen oft automatische (implizite) Konvertierungen durch.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0077¶
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn eine Abfrage mehrere allgemeine Tabellenausdrücke (Common Table Expressions, CTEs) mit Zirkelreferenzen enthält. Wenn Referenzen zwischen CTEs einen Zyklus erzeugen, ist es unmöglich, die richtige Ausführungsreihenfolge zu bestimmen. Infolgedessen können die CTEs nicht richtig angeordnet werden, und ursprüngliche Form der Abfrage bleibt unverändert.
Beispielcode¶
Eingabecode (Teradata):¶
WITH t1(c1) as (SELECT c1 FROM t2),
t2(c2) as (SELECT c2 FROM t3),
RECURSIVE t3(c3) as (SELECT c3, someOtherColumn FROM t1, t3)
SELECT * FROM t1;
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0077 - CYCLE FOUND BETWEEN CTE REFERENCE CALLS, CTES CANNOT BE ORDERED AND THE QUERY WILL REMAIN AS ORIGINAL ***/!!!
WITH RECURSIVE t1(c1) AS
(
SELECT
c1 FROM t2
),
t2(c2) AS
(
SELECT
c2 FROM t3
),
t3(c3) AS
(
SELECT
c3,
someOtherColumn FROM t1, t3
)
SELECT
* FROM t1;
Empfehlungen¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0084¶
Schweregrad¶
Hoch
Beschreibung¶
Die Funktion XMLTABLE wird in dieser Version derzeit nicht unterstützt.
Beispielcode¶
Eingabecode (DB2):¶
SELECT
*
FROM
XMLTABLE(
'stringValue' PASSING BY REF passingExpr AS AliasName
) AS XMLTABLENAME
Ausgabecode:¶
SELECT
*
FROM
!!!RESOLVE EWI!!! /*** SSC-EWI-0084 - XMLTABLE IS NOT SUPPORTED BY SNOWFLAKE ***/!!!
XMLTABLE(
'stringValue' PASSING BY REF passingExpr AS AliasName
) AS XMLTABLENAME
Empfehlungen¶
Eine Anleitung zu XML-Transformationen in Snowflake finden Sie in diesem Blog.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0012¶
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler tritt auf, wenn eine Anweisung im Quellcode unvollständig ist oder nicht ordnungsgemäß beendet wurde.
Beispielcode¶
Eingabecode:¶
CREATE VOLATILE SET TABLE VOLATILETABLE
(
COL1 INTEGER,
COL2 INTEGER,
COL3 INTEGER
)
ON COMMIT PRESERVE ROWS;
UPDATE TABLE2 as T2
SET T2.COL1 + VOLATILETABLE.COL1
WHERE T2.COL2 = VOLATILETABLE.COL2
AND T2.COL3 = VOLATILETABLE.COL3
AND T2.COL4 = ( SELECT MAX(T3.COL1)
FROM
TABLE3 T3
WHERE T3.COL1 = T2.COL1);
Ausgabecode:¶
--** SSC-FDM-TD0024 - SET TABLE FUNCTIONALITY NOT SUPPORTED. TABLE MIGHT HAVE DUPLICATE ROWS **
CREATE OR REPLACE TEMPORARY TABLE VOLATILETABLE
(
COL1 INTEGER,
COL2 INTEGER,
COL3 INTEGER
)
-- --** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "TABLE2", "TABLE3" **
UPDATE TABLE2 AS T2
SET
--** SSC-FDM-0025 - UNEXPECTED END OF STATEMENT. PLEASE CHECK THE LINE 9 OF ORIGINAL SOURCE CODE. **
T2.COL1 + VOLATILETABLE.COL1
FROM
VOLATILETABLE
WHERE T2.COL2 = _VOLATILETABLE.COL2
AND T2.COL3 = _VOLATILETABLE.COL3
AND T2.COL4 = (
SELECT
MAX(T3.COL1)
FROM
TABLE3 T3
WHERE T3.COL1 = T2.COL1);
Empfehlung¶
Überprüfen Sie, ob Ihr Quellcode vollständig ist und ob alle Anweisungen richtig enden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0058¶
Schweregrad¶
Medium
Beschreibung¶
Dieser Fehler tritt auf, wenn Sie versuchen, eine nicht unterstützte Anweisung innerhalb eines CREATE PROCEDURE-Befehls in Snowflake Scripting zu verwenden.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE OR REPLACE PROCEDURE PROC01
IS
number_variable INTEGER;
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
number_variable INTEGER;
BEGIN
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
!!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
INTO number_variable;
END;
$$;
Empfehlungen¶
Endbenutzer müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0108¶
Schweregrad¶
Hoch
Beschreibung¶
In Snowflake können einige Unterabfragemuster und -elemente nicht ausgeführt werden, da sie nicht unterstützt werden. Die Snowflake-Dokumentation zu Unterabfragen listet die folgenden unterstützten Unterabfragetypen auf:
Skalare Unterabfragen, die nicht äußere Abfragen referenzieren, können überall dort verwendet werden, wo ein Wertausdruck zulässig ist.
Skalare Unterabfragen, die äußere Abfragen referenzieren, können in WHERE-Klauseln verwendet werden.
WHERE-Klauseln unterstützen EXISTS-, ANY / ALL- und IN-Unterabfragen. Diese Unterabfragen können äußere Abfragen referenzieren (korreliert) oder nicht referenzieren (nicht korreliert).
Bitte beachten Sie, dass es auch andere gültige Typen von Unterabfragen geben kann, die nicht in dieser Liste enthalten sind.
Um Fehler zu vermeiden, identifiziert SnowConvert häufige Unterabfragemuster, die Kompilierungsprobleme in Snowflake verursachen können. Wenn ein solches Muster erkannt wird, wird eine EWI-Meldung (Error, Warning, Information) generiert, um Benutzer auf mögliche Kompilierungsfehler hinzuweisen.
Beispielcode¶
Eingabecode:¶
CREATE TABLE tableA
(
col1 INTEGER,
col2 VARCHAR(20)
);
CREATE TABLE tableB
(
col3 INTEGER,
col4 VARCHAR(20)
);
INSERT INTO tableA VALUES (50, 'Hey');
INSERT INTO tableB VALUES (50, 'Hey');
INSERT INTO tableB VALUES (50, 'Example');
INSERT INTO tableB VALUES (10, 'Bye');
-- Snowflake only allows the usage of FETCH in subqueries that are uncorrelated scalar, this subquery execution will fail
SELECT col2
FROM tableA
WHERE col2 = (SELECT col4 FROM tableB WHERE col3 = col1 FETCH FIRST ROW ONLY);
-- This subquery is uncorrelated scalar so FETCH is valid to use
SELECT col2
FROM tableA
WHERE col2 = (SELECT col4 FROM tableB FETCH FIRST ROW ONLY);
Ausgabecode:¶
CREATE OR REPLACE TABLE tableA
(
col1 INTEGER,
col2 VARCHAR(20)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/05/2024", "domain": "test" }}'
;
CREATE OR REPLACE TABLE tableB
(
col3 INTEGER,
col4 VARCHAR(20)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "oracle", "convertedOn": "12/05/2024", "domain": "test" }}'
;
INSERT INTO tableA
VALUES (50, 'Hey');
INSERT INTO tableB
VALUES (50, 'Hey');
INSERT INTO tableB
VALUES (50, 'Example');
INSERT INTO tableB
VALUES (10, 'Bye');
-- Snowflake only allows the usage of FETCH in subqueries that are uncorrelated scalar, this subquery execution will fail
SELECT col2
FROM
tableA
WHERE col2 =
--** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
!!!RESOLVE EWI!!! /*** SSC-EWI-0108 - THE FOLLOWING SUBQUERY MATCHES AT LEAST ONE OF THE PATTERNS CONSIDERED INVALID AND MAY PRODUCE COMPILATION ERRORS ***/!!! (SELECT
ANY_VALUE( col4) FROM
tableB
WHERE col3 = col1
FETCH FIRST 1 ROW ONLY);
-- This subquery is uncorrelated scalar so FETCH is valid to use
SELECT col2
FROM
tableA
WHERE col2 = (SELECT col4 FROM
tableB
FETCH FIRST 1 ROW ONLY);
Empfehlungen¶
Überprüfen Sie, ob die Unterabfrage erfolgreich in Snowflake ausgeführt wird. Wenn dies der Fall ist, können Sie diese EWI-Meldung ignorieren.
Sehen Sie sich den Abschnitt „Complex Patterns“ in Ihrem Bewertungsbericht an. In diesem Abschnitt werden Muster aufgeführt, die typischerweise Probleme bei Unterabfragen verursachen, und es wird angegeben, wo sie auftreten. Verwenden Sie diese Informationen, um zu verstehen, warum bestimmte Unterabfragen als ungültig gekennzeichnet wurden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0068¶
Diese EWI-Meldung (Error, Warning, Information) ist veraltet. Aktuelle Informationen entnehmen Sie bitte der Dokumentation zu SSC-FDM-0029.
Die benutzerdefinierten Funktionen von Snowflake unterscheiden sich von den entsprechenden Funktionen in Oracle oder SQL Server. Bei der Migration werden diese Funktionen in gespeicherte Snowflake-Prozeduren konvertiert, um dieselbe Funktionalität beizubehalten. Diese Konvertierung ändert die Art und Weise, wie Sie sie in Ihren Abfragen verwenden.
Beispielcode¶
SQL Server:¶
CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
DECLARE @i int = 0, @p int;
Select @p = COUNT(*) FROM PURCHASING.VENDOR
WHILE (@p < 1000)
BEGIN
SET @i = @i + 1
SET @p = @p + @i
END
IF (@i = 6)
RETURN 1
RETURN @p
END;
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
I INT := 0;
P INT;
BEGIN
Select
COUNT(*)
INTO
:P
FROM
PURCHASING.VENDOR;
WHILE (:P < 1000) LOOP
I := :I + 1;
P := :P + :I;
END LOOP;
IF ((:I = 6)) THEN
RETURN 1;
END IF;
RETURN :P;
END;
$$;
Oracle:¶
CREATE OR REPLACE FUNCTION FUN1(PAR1 VARCHAR)
RETURN VARCHAR
IS
VAR1 VARCHAR(20);
VAR2 VARCHAR(20);
BEGIN
SELECT COL1 INTO VAR1 FROM TABLE1 where col1 = 1;
VAR2 := PAR1 || VAR1;
RETURN VAR2;
END;
!!!RESOLVE EWI!!! /*** SSC-EWI-0068 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE ***/!!!
CREATE OR REPLACE PROCEDURE FUN1(PAR1 VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
VAR1 VARCHAR(20);
VAR2 VARCHAR(20);
BEGIN
SELECT COL1 INTO
:VAR1
FROM
TABLE1
where col1 = 1;
VAR2 := NVL(:PAR1 :: STRING, '') || NVL(:VAR1 :: STRING, '');
RETURN :VAR2;
END;
$$;
Empfehlungen¶
Zerlegen Sie komplexe Abfragen in kleinere, logisch gleichwertige Teile.
Ändern Sie die Struktur des Quellcodes, um ihn an den Ansatz der benutzerdefinierten Funktionen (UDF) von Snowflake anzupassen.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0028¶
Schweregrad¶
Medium
Beschreibung¶
Dieser Fehler tritt auf, wenn Sie versuchen, einen Datentyp zu verwenden, der nicht mit Snowflake kompatibel ist.
Beispiel¶
Eingabecode (Oracle):¶
CREATE TABLE MYTABLE
(
COL1 SYS.ANYDATASET
);
Ausgabecode:¶
CREATE OR REPLACE TABLE MYTABLE
(
!!!RESOLVE EWI!!! /*** SSC-EWI-0028 - TYPE NOT SUPPORTED BY SNOWFLAKE ***/!!!
COL1 SYS.ANYDATASET
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0008¶
Schweregrad¶
Medium
Beschreibung¶
Diese Warnung erscheint, wenn eine COLLATE-Klausel als Spaltenoption verwendet wird. Snowflake unterstützt zwar die Sortierung, aber das Verhalten kann von der Quelldatenbank abweichen. Um die Kompatibilität sicherzustellen, überprüfen Sie die unterstützten Sortierungsspezifizierer in der Dokumentation zu COLLATE.
Beispielcode¶
Eingabecode:¶
CREATE TABLE TABLE01 (
col1 text COLLATE "C"
);
Ausgabecode:¶
CREATE TABLE TABLE01 (
col1 text
!!!RESOLVE EWI!!! /*** SSC-EWI-0008 - COLLATE CLAUSE MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! COLLATE "C"
);
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0049¶
Das EWI
-Feature ist veraltet. Aktuelle Informationen finden Sie in der Dokumentation zu SSC-FDM-0023.
Schweregrad¶
Medium
Beschreibung¶
SnowConvert konvertiert globale temporäre Tabellen in standardmäßige CREATE TABLE-Anweisungen. Bitte beachten Sie, dass Referenzen auf diese umgewandelten Tabellen möglicherweise nicht wie ursprünglich vorgesehen funktionieren.
Codebeispiel¶
Eingabe¶
create global temporary table t1
(col1 varchar);
create view view1 as
select col1 from t1;
Ausgabe¶
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
(col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
select col1 from
!!!RESOLVE EWI!!! /*** SSC-EWI-0049 - A Global Temporary Table is being referenced ***/!!!
t1;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0109¶
Schweregrad¶
Medium
Beschreibung¶
Die Meldung erscheint, wenn die Syntax von ALTER TABLE in Ihrem Code nicht mit den Syntaxanforderungen von Snowflake kompatibel ist.
Beispielcode:¶
Eingabecode:¶
ALTER TABLE SOMENAME DEFAULT COLLATION SOMENAME;
ALTER TABLE SOMENAME ROW ARCHIVAL;
ALTER TABLE SOMENAME MODIFY CLUSTERING;
ALTER TABLE SOMENAME DROP CLUSTERING;
ALTER TABLE SOMENAME SHRINK SPACE COMPACT CASCADE;
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
DEFAULT COLLATION SOMENAME;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
ROW ARCHIVAL;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
MODIFY CLUSTERING;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
DROP CLUSTERING;
!!!RESOLVE EWI!!! /*** SSC-EWI-0109 - ALTER TABLE SYNTAX NOT APPLICABLE IN SNOWFLAKE ***/!!!
ALTER TABLE SOMENAME
SHRINK SPACE COMPACT CASCADE;
Empfehlungen¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0009¶
Schweregrad¶
Niedrig
Beschreibung¶
Derzeit unterstützt Snowflake nur einfache reguläre Ausdrücke, die der POSIX Basic Regular Expression-Syntax entsprechen. Erweiterte Features regulärer Ausdrücke sind nicht verfügbar.
Diese Warnung erscheint immer dann, wenn ein Funktionsaufruf von REGEX_SUBSTR
, REGEX_REPLACE
oder REGEX_INSTR
in Snowflake konvertiert wird. Sie weist Benutzer darauf hin, dass bestimmte Features regulärer Ausdrücke in Snowflake möglicherweise nicht unterstützt werden. Wichtige nicht unterstützte Features sind lookahead, lookbehind, und non-capturing groups.
Beispielcode¶
Teradata:¶
SELECT REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Snowflake Scripting:¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0020 - REGEXP_SUBSTR FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
REGEXP_SUBSTR('qaqequ','q(?=u)', 1, 1);
Empfehlungen¶
Überprüfen Sie jedes Muster eines regulären Ausdrucks, um festzustellen, ob manuelle Änderungen erforderlich sind. Weitere Einzelheiten über die Regex-Funktionen von Snowflake und alternative Optionen finden Sie hier.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0031¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad ¶
Medium
Beschreibung ¶
Diese Warnung zeigt an, dass eine bestimmte _ integrierte Funktion _ von Teradata, Oracle oder SQL Server nicht konvertiert werden kann, da sie von der Zielplattform nicht unterstützt wird.
Beispielcode ¶
Eingabecode (Oracle):¶
SELECT VALUE(ST) FROM SampleTable ST;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0031 - VALUE FUNCTION NOT SUPPORTED ***/!!!
VALUE(ST) FROM
SampleTable ST;
Empfehlungen ¶
Um zu überprüfen, wie bestimmte Funktionen transformiert werden, konsultieren Sie bitte diese Referenzhandbücher:
Wenn Sie weitere Hilfe benötigen, wenden Sie sich an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0005¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieser Fehler tritt auf, wenn der Quellcode aufgrund eines unerwarteten Transformationsfehlers nicht konvertiert werden kann, wodurch die Generierung der Ausgabedatei verhindert wird.
Empfehlungen¶
Überprüfen Sie die Fehlerprotokolldatei, um detaillierte Informationen über das Problem zu erhalten.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0054¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Dieser Fehler tritt auf, wenn eine korrelierte Unterabfrage in einer OR-Bedingung innerhalb einer OUTER JOIN-Anweisung (LEFT, RIGHT oder FULL) entdeckt wird. Diese Situation kann entweder zu inkonsistenten Abfrageergebnissen führen oder eine Fehlermeldung auslösen.
SQL compilation error: The query contains a subquery type that is not supported and cannot be processed.
Snowflake hat diese Beschränkungen für Unterabfragen in seiner offiziellen Dokumentation dokumentiert. Weitere Einzelheiten zu diesen Beschränkungen finden Sie in den Snowflake-Community-Foren.
Beispielcode¶
Eingabecode (Teradata):¶
SELECT a.Column1, b.Column2
FROM
TableA a
LEFT JOIN TableB b ON (a.Column1 = b.Column1)
AND (
a.Column2 = b.Column2
OR EXISTS(
SELECT * FROM Table3 c
WHERE c.Column1 = a.Column1
)
);
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT
a.Column1,
b.Column2
FROM
TableA a
LEFT JOIN
TableB b ON (a.Column1 = b.Column1)
AND (
a.Column2 = b.Column2
OR EXISTS
!!!RESOLVE EWI!!! /*** SSC-EWI-0054 - CORRELATED SUBQUERIES WITHIN AN OR EXPRESSION OF AN OUTER JOIN COULD CAUSE COMPILATION ERRORS ***/!!!(
SELECT
* FROM
Table3 c
WHERE c.Column1 = a.Column1
)
);
Empfehlungen¶
Überprüfen Sie, ob der konvertierte Code fehlerfrei kompiliert werden kann.
Stellen Sie sicher, dass der konvertierte Code genauso funktioniert wie der ursprüngliche Code.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0015¶
Teile des Codes wurden weggelassen, um das Beispiel klar und übersichtlich zu halten.
Schweregrad¶
Medium
Beschreibung¶
In diesem Abschnitt werden mögliche Probleme erläutert, die bei der Verwendung der PIVOT- und UNPIVOT-Klauseln auftreten können. Die folgende Tabelle zeigt die Szenarien, die nicht unterstützt werden.
PIVOT |
UNPIVOT |
ORACLE |
TERADATA |
|
---|---|---|---|---|
MULTIPLE COLUMN |
X |
X |
X |
X |
RENAME COLUMN |
X |
X |
X |
X |
MULTIPLE FUNCTION |
X |
X |
X |
|
WITH CLAUSE |
X |
X |
||
XML OUTPUT FORMAT |
X |
X |
||
IN CLAUSE SUBQUERY |
X |
X |
X |
|
IN CLAUSE ANY SEQUENCE |
X |
X |
||
INCLUDE/EXCLUDE NULLS |
X |
X |
X |
MULTIPLE COLUMN¶
PIVOT und UNPIVOT können jeweils nur in einer einzelnen Spalte ausgeführt werden.
Beispielcode¶
Eingabecode:¶
SELECT * FROM star1p UNPIVOT ((sales,cogs) FOR yr_qtr
IN ((Q101Sales, Q101Cogs) AS 'Q101A',
(Q201Sales, Q201Cogs) AS 'Q201A',
(Q301Sales, Q301Cogs) AS 'Q301A')) AS Tmp;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT * FROM
star1p
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT MULTIPLE COLUMN NOT SUPPORTED ***/!!!
UNPIVOT ((sales,cogs) FOR yr_qtr
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT MULTIPLE COLUMN NOT SUPPORTED ***/!!!
IN ((Q101Sales, Q101Cogs) AS 'Q101A',
(Q201Sales, Q201Cogs) AS 'Q201A',
(Q301Sales, Q301Cogs) AS 'Q301A')) AS Tmp;
RENAME COLUMN¶
Bei Verwendung von UNPIVOT-Klauseln in Snowflake werden Spaltenaliase nicht unterstützt. Um die Kompatibilität sicherzustellen, entfernt SnowConvert automatisch alle Aliase aus Funktionen oder Spalten, um eine gültige Abfrage zu erstellen. Das Tool überprüft, dass das Entfernen dieser Aliase die Funktionalität der ursprünglichen Abfrage nicht beeinträchtigt.
PIVOT-Operationen in SnowConvert für Teradata erfordern zwei bestimmte Bedingungen, damit Spaltenaliase richtig funktionieren:
Jeder Ausdruck innerhalb der IN-Klausel muss einen zugewiesenen Alias haben.
SnowConvert muss wissen, welche Spalten erstellt werden sollen. Diese Informationen können stammen aus:
Einer bereitgestellten Tabellendefinition
Einer Unterabfrage, die explizit die Spalten als Eingabe für die Klausel auflistet
Beispielcode¶
Eingabecode:¶
CREATE TABLE star1(
country VARCHAR(20),
state VARCHAR(10),
yr INTEGER,
qtr VARCHAR(3),
sales INTEGER,
cogs INTEGER
);
--SAMPLE 1
SELECT * FROM db1.star1p UNPIVOT (column1 FOR for_column
IN (col1 AS 'as_col1', col2 AS 'as_col2')) Tmp;
--SAMPLE 2
SELECT *
FROM star1 PIVOT (
SUM(sales) as ss1 FOR qtr
IN ('Q1' AS Quarter1,
'Q2' AS Quarter2,
'Q3' AS Quarter3)
)Tmp;
--SAMPLE 3
SELECT
*
FROM (
SELECT
country,
state,
yr,
qtr,
sales,
cogs
FROM star1 ) A
PIVOT (
SUM(sales) as ss1 FOR qtr
IN ('Q1' AS Quarter1,
'Q2' AS Quarter2,
'Q3' AS Quarter3)
)Tmp;
Ausgabecode:¶
CREATE OR REPLACE TABLE star1 (
country VARCHAR(20),
state VARCHAR(10),
yr INTEGER,
qtr VARCHAR(3),
sales INTEGER,
cogs INTEGER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "08/14/2024" }}'
;
--SAMPLE 1
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "db1.star1p" **
SELECT
* FROM db1.star1p UNPIVOT (column1 FOR for_column
IN (col1 AS 'as_col1', col2 AS 'as_col2')) Tmp !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'PivotUnpivotTableReference' NODE ***/!!!;
--SAMPLE 2
SELECT
*
FROM
star1 PIVOT (
SUM(sales) FOR qtr IN ('Q1',
'Q2',
'Q3')) Tmp (
country,
state,
yr,
cogs,
Quarter1_ss1,
Quarter2_ss1,
Quarter3_ss1
);
--SAMPLE 3
SELECT
*
FROM (
SELECT
country,
state,
yr,
qtr,
sales,
cogs
FROM
star1
) A
PIVOT (
SUM(sales) FOR qtr IN ('Q1',
'Q2',
'Q3')) Tmp (
country,
state,
yr,
cogs,
Quarter1_ss1,
Quarter2_ss1,
Quarter3_ss1
);
MULTIPLE FUNCTION¶
PIVOT-Klauseln unterstützen nicht mehrere Funktionen. Sie können diese Abfragen jedoch oft mithilfe der CASE-Anweisungen neu schreiben. Weitere Einzelheiten und Beispiele finden Sie in der Teradata-Dokumentation: https://docs.teradata.com/r/756LNiPSFdY~4JcCCcR5Cw/L0kKSOrOeu_68mcW3o8ilw
Beispielcode¶
Eingabecode:¶
SELECT *
FROM STAR1 PIVOT(SUM(COL1), SUM(COL2) FOR YR IN ('Y1', 'Y2', 'Y3'))TMP;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT
*
FROM
STAR1
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT MULTIPLE FUNCTION NOT SUPPORTED ***/!!!
PIVOT(SUM(COL1), SUM(COL2) FOR YR IN ('Y1', 'Y2', 'Y3'))TMP;
WITH CLAUSE¶
Die PIVOT-Klausel in Teradata enthält eine optionale WITH-Anweisung, die von der PIVOT-Implementierung von Snowflake nicht unterstützt wird.
Beispielcode¶
Eingabecode:¶
SELECT *
FROM STAR1 PIVOT(SUM(COL1) FOR YR IN ('Y1', 'Y2', 'Y3') WITH SUM(*) AS withalias)TMP;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT
*
FROM
STAR1 PIVOT(SUM(COL1) FOR YR IN ('Y1', 'Y2', 'Y3')
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT WITH CLAUSE NOT SUPPORTED ***/!!!
WITH SUM(*) AS withalias)TMP;
XML OUTPUT FORMAT¶
Die XML-Ausgabe von PIVOT-Operationen wird in Snowflake nicht unterstützt.
Beispielcode¶
Eingabecode:¶
SELECT * FROM (SELECT product_code, quantity FROM pivot_test)
PIVOT XML (SUM(quantity)
FOR (product_code) IN ('A','B','C'));
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT * FROM
(
SELECT product_code, quantity FROM
pivot_test)
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT XML OUTPUT FORMAT NOT SUPPORTED ***/!!!
PIVOT (SUM(quantity) FOR product_code IN ( 'A', 'B', 'C'));
IN CLAUSE SUBQUERY¶
Der Snowpark Migration Accelerator unterstützt nicht die Verwendung von Unterabfragen innerhalb von IN-Klauseln.
Beispielcode¶
Eingabecode:¶
SELECT * FROM s1 PIVOT(SUM(COL1) FOR FORCOL IN (SELECT SELCOL FROM S2))DT;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT * FROM
s1 PIVOT (SUM(COL1) FOR FORCOL
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT IN CLAUSE SUBQUERY NOT SUPPORTED ***/!!! IN (SELECT SELCOL FROM
S2));
IN CLAUSE ANY SEQUENCE¶
Dieser Fehler tritt auf, wenn das ANY-Schlüsselwort innerhalb einer IN-Klausel verwendet wird. Diese Kombination wird derzeit vom System nicht unterstützt.
Beispielcode¶
Eingabecode:¶
SELECT * FROM (SELECT product_code, quantity FROM pivot_test)
PIVOT (SUM(quantity)
FOR product_code IN (ANY, ANY, ANY));
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT * FROM (SELECT product_code, quantity FROM
pivot_test)
PIVOT (SUM(quantity)
FOR product_code
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT IN CLAUSE ANY SEQUENCE NOT SUPPORTED ***/!!!
IN (ANY, ANY, ANY));
INCLUDE/EXCLUDE NULLS¶
UNPIVOT-Klauseln in Snowflake unterstützen nicht die Optionen INCLUDE NULLS und EXCLUDE NULLS.
Beispielcode¶
Eingabecode:¶
SELECT * FROM db1.star1p UNPIVOT INCLUDE NULLS (column1 FOR for_column IN (col1, col2)) Tmp;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
SELECT * FROM
db1.star1p
!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT INCLUDE NULLS NOT SUPPORTED ***/!!!
UNPIVOT ( column1 FOR for_column IN (
col1,
col2)) Tmp;
Empfehlungen¶
Wenn möglich, schreiben Sie die Abfrage neu. Wenn nicht, müssen Sie keine weiteren Maßnahmen ergreifen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0021¶
Schweregrad¶
Medium
Beschreibung¶
Dieser Fehler tritt auf, wenn Ihr Quellcode einen Knoten oder eine Anweisung enthält, die nicht mit der Funktionalität von Snowflake kompatibel ist.
Beispielcode¶
Eingabecode:¶
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE ***/!!!
WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
SELECT aValue from my_av;
Empfehlungen¶
Dieser Fehler tritt auf, wenn es für den zu konvertierenden Quellcode keine entsprechende Snowflake-Funktionalität gibt.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0110¶
Schweregrad¶
Niedrig
Beschreibung¶
Wenn SnowConvert auf fehlende Abhängigkeiten stößt, fügt es eine EWI-Meldung (Error, Warning, Information) hinzu, um anzugeben, dass die Codeumwandlung nicht abgeschlossen werden kann. SnowConvert erstellt normalerweise neuen Code, indem es die Struktur des ursprünglichen Quellcodes anhand abstrakter Syntaxstrukturbäume analysiert, kann jedoch die Transformation nicht abschließen, wenn wesentliche Abhängigkeiten im semantischen Modell fehlen.
Beispielcode¶
Eingabecode:¶
ALTER TABLE MissingTable ADD
CONSTRAINT constraint1 DEFAULT (suser_name()) FOR col1;
Ausgabecode:¶
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "MissingTable" **
!!!RESOLVE EWI!!! /*** SSC-EWI-0110 - TRANSFORMATION NOT PERFORMED DUE TO MISSING DEPENDENCIES ***/!!!
ALTER TABLE MissingTable
ADD
CONSTRAINT constraint1 DEFAULT (CURRENT_USER()) FOR col1;
Empfehlungen¶
Fügen Sie alle erforderlichen Abhängigkeiten hinzu, die nicht in Ihrem Code vorhanden sind.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0001¶
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Schweregrad¶
Kritisch
Beschreibung¶
Dieser Fehler tritt auf, wenn das System den Quellcode während der Konvertierung nicht richtig lesen und verarbeiten kann. Dies kann aus zwei Gründen geschehen:
Der Quellcode enthält Syntaxfehler.
Der Konverter erkennt bestimmte Codeanweisungen oder Syntax noch nicht.
Beispielcode¶
Die folgenden Beispiele zeigen verschiedene Parsing-Fehlerszenarien mit falscher Syntax in der Eingabe. In jedem Szenario wird eine andere Fehlermeldung angezeigt, die Ihnen helfen kann, das Problem zu identifizieren und zu beheben. Weitere Einzelheiten finden Sie im Abschnitt „Meldungsinhalte“ weiter unten.
Eingabecode:¶
CRATE;
CREATE TABLE someTable(col1 INTEGER, !);
CREATE TABRE badTable(col1 INTEGER);
CREATE PROCEDURE proc1()
BEGIN
CREATE TABLE badEmbeddedTable(col1 INTEGER);
END;
Ausgabecode:¶
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '1' COLUMN '1' OF THE SOURCE CODE STARTING AT 'CRATE'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'CRATE' ON LINE '1' COLUMN '1'. **
--CRATE
;
CREATE OR REPLACE TABLE someTable (
col1 INTEGER
-- ,
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '3' COLUMN '37' OF THE SOURCE CODE STARTING AT '!'. EXPECTED 'Column Definition' GRAMMAR. LAST MATCHING TOKEN WAS ',' ON LINE '3' COLUMN '35'. FAILED TOKEN WAS '!' ON LINE '3' COLUMN '37'. **
-- !
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/04/2024" }}'
;
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '5' COLUMN '1' OF THE SOURCE CODE STARTING AT 'CREATE'. EXPECTED 'STATEMENT' GRAMMAR. LAST MATCHING TOKEN WAS 'CREATE' ON LINE '5' COLUMN '1'. **
--CREATE TABRE badTable(col1 INTEGER)
;
CREATE OR REPLACE PROCEDURE proc1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
BEGIN
CREATE OR REPLACE TABLE badEmbeddedTable (
col1 INTEGER);
END;
$$;
Meldungsinhalte¶
Starting Position: Zeigt an, wo der nicht erkannte Code beginnt, einschließlich der Zeilennummer, der Spaltennummer und des eigentlichen Textes. Jeder nicht erkannte Code ab diesem Punkt wird auskommentiert, bis der Parser gültigen Code findet.
Expected Grammar: Gibt an, nach welchem Typ von Codestruktur der Parser gesucht hat. Vergleichen Sie dies mit dem kommentierten Code, um zu überprüfen, ob sie übereinstimmen.
Last Valid Token (OPTIONAL): Zeigt den letzten Code an, der erfolgreich erkannt wurde. Falls vorhanden, überprüfen Sie den folgenden Code, um sicherzustellen, dass er syntaktisch korrekt ist.
Failed Token (OPTIONAL): Erscheint nur, wenn „Last Valid Token“ vorhanden ist. Bezeichnet den genauen Punkt, an dem der Code ungültig oder unerkennbar wurde. Überprüfen Sie, ob dieses Codeelement an dieser Position erlaubt ist.
Eingestellte und nicht mehr unterstützte Meldungsinhalte¶
Die folgenden Elemente werden nicht mehr verwendet und nur noch als historische Referenz beibehalten.
Recovery Code (DEPRECATED): Dieser Fehlercode hilft zu erkennen, wie der Wiederherstellungsmechanismus des Parsers ausgelöst wurde. Sie können diesen Code angeben, wenn Sie Unterstützung für Parser-Upgrades anfordern, um die Fehlersuche zu erleichtern.
Empfehlungen¶
Überprüfen Sie, ob Ihr Quellcode den korrekten Syntaxregeln folgt.
Verwenden Sie Fehlermeldungen, um Probleme zu erkennen und zu beheben.
Wenn Sie auf eine nicht unterstützte Syntax stoßen, ändern Sie sie manuell, um unterstützte Syntaxmuster zu verwenden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0035¶
Teile des Codes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Die _ CHECK _-Einschränkung wird in Snowflake nicht unterstützt, aber diese Beschränkung hat keinen Einfluss auf die Funktionalität Ihrer Datenbank.
Beispielcode¶
Eingabecode Oracle:¶
CREATE TABLE "Schema"."BaseTable"(
"COLUMN1" VARCHAR2(255),
CHECK ( COLUMN1 IS NOT NULL )
);
Ausgabecode:¶
CREATE OR REPLACE TABLE "Schema"."BaseTable" (
"COLUMN1" VARCHAR(255),
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
CHECK ( COLUMN1 IS NOT NULL )
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Eingabecode Teradata:¶
CREATE TABLE TABLE1,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL
(
COL0 BYTEINT,
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Ausgabecode:¶
CREATE OR REPLACE TABLE TABLE1
(
COL0 BYTEINT,
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Eingabecode SqlServer:¶
ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
Ausgabecode:¶
ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
!!!RESOLVE EWI!!! /*** SSC-EWI-0035 - CHECK STATEMENT NOT SUPPORTED ***/!!!
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0064¶
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler tritt auf, wenn in einer DML-Anweisung (Data Manipulation Language) ein benutzerdefinierter Typ (User-Defined Type, UDT) referenziert wird, der UDT jedoch nicht zuvor in der Datenbank definiert wurde. Dies geschieht häufig, wenn eine Tabellenspalte mit einem benutzerdefinierten Typ deklariert wird, der im System nicht existiert.
Dieser Fehler sollte nicht mit dem Fehler SSC-FDM-0015 verwechselt werden, der auftritt, wenn das Objekt in einer DDL-Abfrage referenziert wird.
Beispielcode¶
Eingabecode (Oracle):¶
--Type was never defined
--CREATE TYPE type1;
CREATE TABLE table1
(
--the type will be unresolved
column1 type1
);
SELECT
column1
FROM table1;
Ausgabecode:¶
--Type was never defined
--CREATE TYPE type1;
!!!RESOLVE EWI!!! /*** SSC-EWI-0050 - MISSING DEPENDENT OBJECT "type1" ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0063 - 'PUBLIC.table1_view' ADDED BECAUSE 'table1' USED A CUSTOM TYPE ***/!!!
CREATE OR REPLACE TABLE table1
(
--the type will be unresolved
column1 VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0064 - REFERENCED CUSTOM TYPE 'type1' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/!!! /*** SSC-FDM-0015 - DATA TYPE 'type1' NOT RECOGNIZED ***/
);
CREATE OR REPLACE VIEW PUBLIC.table1_view
AS
SELECT
column1
FROM
table1;
SELECT
column1 !!!RESOLVE EWI!!! /*** SSC-EWI-0064 - REFERENCED CUSTOM TYPE 'type1' IN QUERY NOT FOUND, USAGES MAY BE AFFECTED ***/!!!
FROM
table1;
Empfehlungen¶
Überprüfen Sie, ob der in Ihrem Code erwähnte Datentyp im Quellcode richtig definiert wurde.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0025¶
Die EWI (External Web Interface) wird ausschließlich bei der Übersetzung gespeicherter Prozeduren in JavaScript erzeugt. Dieses Feature wird jedoch nicht mehr empfohlen, da Snowflake Scripting jetzt die bevorzugte Sprache für gespeicherte Prozeduren ist.
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Abfragen, die Zeitvariablen enthalten, müssen möglicherweise geändert werden, wenn Sie diese Variablen binden.
Beispielcode¶
Eingabecode:¶
-- Additional Params: -t javascript
CREATE PROCEDURE P_1025()
BEGIN
DECLARE LN_EMP_KEY_NO_PARAM NUMERIC DEFAULT -1;
DECLARE FLOATVARNAME FLOAT DEFAULT 12.1;
DECLARE hErrorMsg CHARACTER(30) DEFAULT 'NO ERROR';
DECLARE CurrTs TIME DEFAULT CURRENT_TIME;
DECLARE CurrTs2 TIME DEFAULT CURRENT_TIMESTAMP;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE P_1025 ()
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
// SnowConvert Helpers Code section is omitted.
var LN_EMP_KEY_NO_PARAM = -1;
var FLOATVARNAME = 12.1;
var HERRORMSG = `NO ERROR`;
var CURRTS = new Date() /*** SSC-EWI-0025 - BINDING TIME VARIABLE MIGHT REQUIRE CHANGE IN QUERY. ***/;
var CURRTS2 = new Date();
$$;
Empfehlungen¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0011¶
Schweregrad¶
Hoch
Beschreibung¶
Dieser Fehler tritt auf, wenn eine Anweisung im Quellcode unerwartet endet und das System sie nicht richtig verarbeiten kann.
Empfehlungen¶
Vergewissern Sie sich, dass Ihr Quellcode vollständig ist und dass alle Anweisungen ordnungsgemäß beendet werden.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0040¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter verständlich zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn Sie eine SQL-Anweisung verwenden, die in Snowflake nicht unterstützt wird.
Beispielcode¶
Das folgende Beispiel zeigt eine SQL Server-SELECT Abfrage, die die PERCENT
-Klausel verwendet. Dieses Feature ist in Snowflake nicht verfügbar.
Eingabecode (SQL Server):¶
SELECT TOP 1 PERCENT * FROM SampleTable;
Quellcode:¶
// SnowConvert Helpers Code section is omitted.
SELECT
TOP 1 !!!RESOLVE EWI!!! /*** SSC-EWI-0040 - THE STATEMENT IS NOT SUPPORTED IN SNOWFLAKE ***/!!!
*
FROM
SampleTable;
Empfehlungen¶
Überprüfen Sie, ob die Funktionalität der ursprünglichen Anweisung für Ihre Snowflake-Implementierung erforderlich ist.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0034¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Niedrig
Beschreibung¶
Diese Warnung erscheint, wenn Sie versuchen, eine CAST-Funktion mit einer Spalte zu verwenden, deren Format entfernt wurde.
Beispielcode¶
Eingabecode (Teradata):¶
CREATE VIEW SampleView AS
SELECT
DAY_DATE(FORMAT 'MMM-YYYY') + 1
FROM
SampleTable;
Ausgabecode:¶
// SnowConvert Helpers Code section is omitted.
CREATE OR REPLACE VIEW SampleView
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
DAY_DATE !!!RESOLVE EWI!!! /*** SSC-EWI-0034 - FORMAT 'MMM-YYYY' REMOVED. ***/!!! + 1
FROM
SampleTable;
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0086¶
Das EWI
-Feature ist veraltet. Aktuelle Informationen finden Sie in der Dokumentation zu SSC-FDM-0030.
Schweregrad¶
Niedrig
Beschreibung¶
Der Bezeichner enthält Zeichen, die in der Ausgabesprache nicht unterstützt werden. Diese Zeichen wurden durch ihre entsprechenden UTF-8-Codes ersetzt.
Beispielcode¶
Eingabecode (Oracle):¶
CREATE PROCEDURE PROC1
AS
"VAR0" INT;
"VAR`/1ͷ" VARCHAR(20);
"o*/o" FLOAT;
" . " INT;
". ." INT;
"123Name" INT;
"return" INT;
yield INT;
ident#10 INT;
BEGIN
NULL;
END;
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
"VAR0" INT;
!!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
VAR_u60_u2F1ͷ VARCHAR(20);
!!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
o_u2A_u2Fo FLOAT;
!!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
_u20_u2E_u20 INT;
!!!RESOLVE EWI!!! /*** SSC-EWI-0086 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES ***/!!!
_u2E_u20_u2E INT;
"123Name" INT;
"return" INT;
yield INT;
IDENT_HASHTAG_10 INT;
BEGIN
NULL;
END;
$$;
Empfehlungen¶
Endbenutzer müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0010¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieser Fehler tritt auf, wenn das System keine entsprechende Transformationsregel für eine bestimmte Prozeduranweisung finden kann.
Empfehlungen¶
Überprüfen Sie, ob Ihre Prozeduranweisung richtig formatiert ist.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0041¶
Diese EWI
-Meldung ist veraltet. Weitere Informationen finden Sie unter SSC-OOS-0001.
Beschreibung¶
Dieser Fehler tritt auf, wenn die Quellcodedatei ein Zeichencodierungsformat verwendet, das das Tool nicht erkennen kann. Die Zeichencodierung ist eine Methode zur Konvertierung von Textzeichen in numerische Werte, die Computer verarbeiten können. Wenn das Konvertierungsprogramm auf Zeichen stößt, die es nicht interpretieren kann, generiert es diesen Fehler.
Empfehlungen¶
Stellen Sie sicher, dass alle Dateien im Eingabeordner die gleiche Zeichencodierung verwenden, um codierungsbedingte Fehler zu vermeiden.
Wählen Sie die richtige Codierung, indem Sie entweder:
Die Konvertierungseinstellungen anpassen oder
Den –encoding-Parameter mit der CLI verwenden
Um die korrekte Codierung zu ermitteln, können Sie:
Onlinetools wie Free Online Formatter verwenden
Unter Linux oder OS den Befehl
file -i *
ausführen
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns unter snowconvert-support@snowflake.com
SSC-EWI-0101¶
Schweregrad¶
Niedrig
Beschreibung¶
Snowflake unterstützt keine Transaktionsbezeichnungsnamen, da verschachtelte Transaktionen nicht erlaubt sind, so dass es nicht notwendig ist, bestimmte Transaktionen in COMMIT- oder ROLLBACK-Anweisungen zu identifizieren.
Beispielcode¶
Eingabecode (SQL Server):¶
CREATE PROCEDURE TestTransaction
AS
BEGIN
DROP TABLE IF EXISTS NEWTABLE;
CREATE TABLE NEWTABLE(COL1 INT, COL2 VARCHAR);
BEGIN TRANSACTION LabelA;
INSERT INTO NEWTABLE VALUES (1, 'MICHAEL');
INSERT INTO NEWTABLE VALUES(2, 'JACKSON');
COMMIT TRANSACTION LabelA;
END
Ausgabecode:¶
CREATE OR REPLACE PROCEDURE TestTransaction ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
BEGIN
DROP TABLE IF EXISTS NEWTABLE;
CREATE OR REPLACE TABLE NEWTABLE (
COL1 INT,
COL2 VARCHAR
);
BEGIN TRANSACTION
!!!RESOLVE EWI!!! /*** SSC-EWI-0101 - COMMENTED OUT TRANSACTION LABEL NAME BECAUSE IS NOT APPLICABLE IN SNOWFLAKE ***/!!!
LabelA;
INSERT INTO NEWTABLE VALUES (1, 'MICHAEL');
INSERT INTO NEWTABLE VALUES(2, 'JACKSON');
COMMIT;
END;
$$;
Empfehlungen¶
Von den Benutzern ist keine Aktion erforderlich.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0030¶
Teile des Ausgabecodes wurden entfernt, um das Beispiel übersichtlicher und leichter nachvollziehbar zu machen.
Schweregrad¶
Moderat
Beschreibung¶
Dieser Fehler gibt an, dass die Anweisung dynamisches SQL enthält. Dabei handelt es sich um SQL-Code, der mithilfe der von der Datenbank-Engine bereitgestellten Zeichenfolgenbearbeitungsfunktionen als Text erstellt wurde. Verschiedene Quellsprachen haben eigene Methoden zur Ausführung von dynamischen SQL-Anweisungen.
Dieses Muster ist komplex, da es SQL-Code umfasst, der während der Laufzeit generiert und ausgeführt wird, was das Aufspüren und Debuggen von Problemen erschwert. SnowConvert als statischer Codeanalysator kann solches dynamisches SQL nicht vollständig analysieren, und diese Fehlermeldung hilft, mögliche Probleme zu erkennen.
Codebeispiel¶
Teradata¶
REPLACE PROCEDURE teradata_dynamic_sql()
BEGIN
DECLARE str_sql VARCHAR(20);
SET str_sql = 'UPDATE TABLE
SET COLA = 0,
COLB = ''test''';
EXECUTE IMMEDIATE str_sql;
EXECUTE IMMEDIATE 'INSERT INTO TABLE1(COL1) VALUES(1)';
EXECUTE str_sql;
CALL DBC.SysExecSQL('INSERT INTO TABLE1(COL1) VALUES(1)');
END;
CREATE OR REPLACE PROCEDURE teradata_dynamic_sql ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "teradata", "convertedOn": "07/04/2024" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
str_sql VARCHAR(20);
BEGIN
str_sql := 'UPDATE "TABLE"
SET COLA = 0,
COLB = ''test''';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE str_sql;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'INSERT INTO TABLE1 (COL1)
VALUES (1);';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE str_sql;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'INSERT INTO TABLE1 (COL1)
VALUES (1);';
END;
$$;
Oracle¶
CREATE OR REPLACE PROCEDURE oracle_dynamic_sql
AS
dynamic_statement VARCHAR(100);
numeric_variable INTEGER;
dynamic_statement VARCHAR(100);
column_variable VARCHAR(100);
cursor_variable SYS_REFCURSOR;
c INTEGER;
dynamic_statement VARCHAR(100);
BEGIN
dynamic_statement := 'INSERT INTO sample_table(col1) VALUES(1)';
numeric_variable := 3;
column_variable := 'col1';
EXECUTE IMMEDIATE dynamic_statement;
EXECUTE IMMEDIATE 'INSERT INTO sample_table(col1) VALUES(' || numeric_variable || ')';
OPEN cursor_variable FOR dynamic_statement;
OPEN cursor_variable FOR 'SELECT ' || column_variable || ' FROM sample_table';
OPEN cursor_variable FOR 'SELECT col1 FROM sample_table';
c := DBMS_SQL.OPEN_CURSOR;
dynamic_statement := 'SELECT * FROM sample_table';
DBMS_SQL.PARSE(c, dynamic_statement);
END;
CREATE OR REPLACE PROCEDURE oracle_dynamic_sql ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
dynamic_statement VARCHAR(100);
numeric_variable INTEGER;
dynamic_statement VARCHAR(100);
column_variable VARCHAR(100);
cursor_variable_res RESULTSET;
c INTEGER;
dynamic_statement VARCHAR(100);
BEGIN
dynamic_statement := 'INSERT INTO sample_table(col1) VALUES(1)';
numeric_variable := 3;
column_variable := 'col1';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE :dynamic_statement;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'INSERT INTO sample_table(col1) VALUES(' || NVL(:numeric_variable :: STRING, '') || ')';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
cursor_variable_res := (
EXECUTE IMMEDIATE :dynamic_statement
);
LET cursor_variable CURSOR
FOR
cursor_variable_res;
OPEN cursor_variable;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
cursor_variable_res := (
EXECUTE IMMEDIATE 'SELECT ' || NVL(:column_variable :: STRING, '') || ' FROM
sample_table'
);
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
LET cursor_variable CURSOR
FOR
cursor_variable_res;
OPEN cursor_variable;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
cursor_variable_res := (
EXECUTE IMMEDIATE 'SELECT col1 FROM
sample_table'
);
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0133 - THE CURSOR VARIABLE NAMED 'cursor_variable' HAS ALREADY BEEN ASSIGNED IN ANOTHER CURSOR ***/!!!
LET cursor_variable CURSOR
FOR
cursor_variable_res;
OPEN cursor_variable;
c :=
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_SQL.OPEN_CURSOR' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS OPEN_CURSOR;
dynamic_statement := 'SELECT * FROM
sample_table';
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'DBMS_SQL.PARSE' IS NOT CURRENTLY SUPPORTED. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
DBMS_SQL.PARSE(:c, :dynamic_statement);
END;
$$;
SQL Server¶
CREATE OR ALTER PROCEDURE transact_dynamic_sql
AS
BEGIN
DECLARE @dynamicStatement AS VARCHAR(200);
DECLARE @numericVariable AS VARCHAR(200);
SET @dynamicStatement = 'INSERT INTO sample_table(col1) VALUES(1);';
SET @numericVariable = '3';
EXECUTE (@dynamicStatement);
EXEC ('INSERT INTO sampleTable(col1) VALUES (' + @numericVariable + ');');
EXECUTE ('INSERT INTO sampleTable(col1) VALUES(10);') AS USER = 'DbAdmin';
INSERT INTO sampleTable EXECUTE sp_executesql @statement = 'SELECT * FROM sampleTable;';
INSERT INTO sampleTable EXECUTE ('SELECT * FROM sampleTable;');
END;
CREATE OR REPLACE PROCEDURE transact_dynamic_sql ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "11/13/2024", "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
DECLARE
DYNAMICSTATEMENT VARCHAR(200);
NUMERICVARIABLE VARCHAR(200);
BEGIN
DYNAMICSTATEMENT := 'INSERT INTO sample_table (col1) VALUES(1);';
NUMERICVARIABLE := '3';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE :DYNAMICSTATEMENT;
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!
EXECUTE IMMEDIATE 'INSERT INTO sampleTable (col1) VALUES (' || :NUMERICVARIABLE || ');';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0021 - EXECUTE AS USER/LOGIN NOT SUPPORTED IN SNOWFLAKE ***/!!!
EXECUTE IMMEDIATE 'INSERT INTO sampleTable (col1) VALUES(10);';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'INSERT WITH EXECUTE' NODE ***/!!!
INSERT INTO sampleTable EXECUTE IMMEDIATE 'SELECT
*
FROM
sampleTable;';
!!!RESOLVE EWI!!! /*** SSC-EWI-0030 - THE STATEMENT BELOW HAS USAGES OF DYNAMIC SQL. ***/!!!!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'INSERT WITH EXECUTE' NODE ***/!!!
INSERT INTO sampleTable EXECUTE IMMEDIATE 'SELECT
*
FROM
sampleTable;';
END;
$$;
Probleme in dynamischem SQL¶
Bei der Migration von dynamischem SQL-Code ist es wichtig zu beachten, dass SnowConvert keine Probleme in dynamischen SQL-Anweisungen erkennt oder meldet. Dies gilt sowohl für den konvertierten Ausgabecode als auch für die Bewertungsberichte, selbst in Fällen, in denen die Dokumentation oder die Übersetzungsspezifikationen darauf hinweisen, dass ein Problem gekennzeichnet werden sollte. Diese Beschränkung kann zum Beispiel bei der Migration von Oracle-Code festgestellt werden.
SELECT dbms_random.value() FROM dual;
CREATE OR REPLACE PROCEDURE dynamic_sql_procedure
AS
result VARCHAR(100) := 'SELECT dbms_random.value() from dual';
BEGIN
NULL;
END;
SELECT
--** SSC-FDM-OR0033 - DBMS_RANDOM.VALUE DIGITS OF PRECISION ARE LOWER IN SNOWFLAKE **
DBMS_RANDOM.VALUE_UDF() FROM dual;
CREATE OR REPLACE PROCEDURE dynamic_sql_procedure ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
result VARCHAR(100) := 'SELECT
DBMS_RANDOM.VALUE_UDF() from dual';
BEGIN
NULL;
END;
$$;
Wenn Sie die beiden Ansätze vergleichen, weisen sowohl die Abfrage- als auch die Variablenzuweisung in der Prozedur identische Konvertierungen auf. Wenn Sie jedoch dynamisches SQL verwenden, sind Konvertierungsprobleme weder im Ausgabecode noch in den Bewertungsberichten sichtbar.
Empfehlungen¶
Aktivieren Sie die Anweisungsverfolgung, um dynamisch generierte SQL-Anweisungen während der Fehlersuche zu überwachen und zu überprüfen.
Wenn Sie weitere Hilfe benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0092¶
Veraltet
Schweregrad¶
Niedrig
Beschreibung¶
Materialisierte Snowflake-Ansichten haben bestimmte Beschränkungen, die in der Snowflake-Dokumentation dokumentiert sind. Derzeit wandelt SnowConvert alle materialisierten Ansichten in reguläre Ansichten um und entfernt alle zusätzlichen Klauseln. In zukünftigen Versionen wird SnowConvert die Konvertierung kompatibler materialisierter Ansichten in ihre Snowflake-Entsprechung unterstützen.
Beispielcode¶
Eingabecode:¶
CREATE MATERIALIZED VIEW MATERIALIZED_VIEW1
SEGMENT CREATION IMMEDIATE
ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
INMEMORY PRIORITY NONE MEMCOMPRESS FOR QUERY LOW DISTRIBUTE AUTO NO DUPLICATE
AS
select
*
from
aTable;
Ausgabecode:¶
!!!RESOLVE EWI!!! /*** SSC-EWI-0092 - MATERIALIZED VIEW WAS CONVERTED TO REGULAR VIEW. ***/!!!
CREATE OR REPLACE VIEW MATERIALIZED_VIEW1
COMMENT = '{"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
aTable;
Empfehlungen¶
Sie müssen nichts unternehmen.
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0004¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieses Problem tritt auf, wenn beim Ausführen einer Konvertierungsregel für einen bestimmten SCRIPT(bteq…)-Knoten im Quellcode ein Fehler auftritt.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0045¶
Schweregrad¶
Medium
Beschreibung¶
Bei der Konvertierung von Code in Snowflake können Sie auf Spaltennamen stoßen, die in Ihrer Quelldatenbank gültig sind, aber mit den reservierten Schlüsselwörtern von Snowflake in Konflikt stehen. Dies liegt daran, dass bestimmte Wörter in Snowflake für die Verwendung im System reserviert sind und nicht ohne spezielle Formatierung als Spaltennamen verwendet werden können. Eine vollständige Liste dieser Schlüsselwörter finden Sie in der Snowflake-Dokumentation Reservierte und beschränkte Schlüsselwörter.
Codebeispiel¶
Eingabe¶
CREATE TABLE T1
(
LOCALTIME VARCHAR,
CURRENT_USER VARCHAR
);
Ausgabe¶
CREATE OR REPLACE TABLE T1
(
!!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
"LOCALTIME" VARCHAR,
!!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
"CURRENT_USER" VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
Empfehlungen¶
Überprüfen Sie alle Spalten, deren Namen nicht mit den Namenskonventionen von Snowflake übereinstimmen, und benennen Sie sie um.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.
SSC-EWI-0014¶
Schweregrad¶
Kritisch
Beschreibung¶
Dieser Fehler tritt auf, wenn das System den erforderlichen Body für eine Anweisung einer gespeicherten Prozedur nicht generieren kann.
Empfehlungen¶
Wenn Sie zusätzliche Unterstützung benötigen, kontaktieren Sie uns bitte unter snowconvert-support@snowflake.com
SSC-EWI-0020¶
Schweregrad¶
Niedrig
Zusammenfassung¶
SnowConvert enthält mehrere benutzerdefinierte Funktionen (User-Defines Functions, UDFs), mit denen Sie das Verhalten von Quellsprachen replizieren können, die von Snowflake nicht nativ unterstützt werden. Hier sind ihre Funktionen und Beschreibungen.
UDFs (User-Defined Functions, benutzerdefinierte Funktionen) befinden sich im Ordner „UDF Helpers“, der nach Abschluss des Migrationsprozesses automatisch in dem von Ihnen angegebenen Ausgabeverzeichnis erstellt wird.
Empfehlungen¶
Überprüfen Sie, ob der Ordner „UDF Helpers“ erstellt wurde und die erwarteten Dateien enthält.
Wenn Sie weitere Hilfe benötigen, wenden Sie sich bitte an unser Support-Team unter snowconvert-support@snowflake.com.