SnowConvert AI – Oracle – DML STATEMENTS

Beschreibung

DML-Anweisungserweiterungen unterscheiden sich von normalen DML- Anweisungen, da sie PL/SQL-Elemente wie Sammlungen und Datensätze verwenden können. Bislang werden einige dieser Elemente von Snowflake Scripting nicht unterstützt. Wenn eine Anweisung nicht unterstützt wird, wird während der Übersetzung eine EWI hinzugefügt. Andere DML-Anweisungen werden so übersetzt, als befänden sie sich nicht innerhalb einer Prozedur.

Erweiterung der INSERT-Anweisung

Übersetzungsreferenz zur Konvertierung der INSERT-Anweisungserweiterung von Oracle in Snowflake Scripting

Bemerkung

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

Beschreibung

Mit der PL/SQL-Erweiterung der SQL INSERT-Anweisung können Sie einen Datensatznamen in der values_clause des single_table_insert angeben, anstatt eine Spaltenliste unter insert_into_clause zu spezifizieren. (Oracle PL/SQL Language Reference Erweiterung INSERT Statement)

Snowflake INSERT INTO unterscheidet sich von Snowflake Scripting in den Variableneinschränkungen. Den Namen muss ein Doppelpunkt „:“ vorangestellt werden, um den Wert der Variablen zu binden.

Empfehlungen

Bemerkung

Dieser Code wurde zum besseren Verständnis der Beispiele ausgeführt:

Oracle

CREATE TABLE numbers_table(num integer, word varchar2(20));
Copy
Snowflake
CREATE OR REPLACE TABLE PUBLIC.numbers_table (num integer,
word VARCHAR(20));
Copy

Simple Case, Erweiterung der INSERT-Anweisung

Oracle
CREATE OR REPLACE PROCEDURE proc_insert_statement
AS
number_variable integer := 10;
word_variable varchar2(20) := 'ten';
BEGIN 
	INSERT INTO numbers_table VALUES(number_variable, word_variable);	
	INSERT INTO numbers_table VALUES(11, 'eleven');	
END;

CALL proc_insert_statement();
SELECT * FROM numbers_table ;
Copy
Ergebnis

NUM

WORD

10

zehn

11

elf

Snowflake Scripting
CREATE OR REPLACE PROCEDURE proc_insert_statement ()
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 := 10;
		word_variable VARCHAR(20) := 'ten';
	BEGIN
		INSERT INTO numbers_table
		VALUES(:number_variable, :word_variable);
		INSERT INTO numbers_table
		VALUES(11, 'eleven');
	END;
$$;

CALL proc_insert_statement();

SELECT * FROM
	numbers_table;
Copy
Ergebnis

NUM

WORD

10

zehn

11

elf

Bekannte Probleme

1. Records are not supported by Snowflake Scripting

Da Datensätze von Snowflake Scripting nicht unterstützt werden, muss anstelle der Verwendung der VALUES record-Klausel diese in eine SELECT-Klausel geändert und die Spalten des Datensatzes müssen aufgeteilt werden. Weitere Informationen finden Sie im Abschnitt zur Definition eines Datensatztyps.

MERGE-Anweisung

Übersetzungsreferenz zur Konvertierung der MERGE-Anweisung von Oracle in Snowflake Scripting

Bemerkung

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

Beschreibung

Die MERGE-Anweisung wird verwendet, um Zeilen aus einer oder mehreren Quellen zur Aktualisierung oder zum Einfügen in eine Tabelle oder Ansicht auszuwählen. Es ist möglich, Bedingungen anzugeben, um zu bestimmen, ob Zielen für die Zieltabelle oder -ansicht aktualisiert oder eingefügt werden soll. Diese Anweisung ist eine praktische Möglichkeit, mehrere Operationen zu kombinieren. So können damit mehrere INSERT-, UPDATE- und DELETE DML-Anweisungen vermeiden. MERGE ist eine deterministische Anweisung. Es ist nicht möglich, dieselbe Zeile der Zieltabelle mehrfach in derselben MERGE-Anweisung zu aktualisieren. (Oracle PL/SQL-Sprachreferenz – MERGE-Anweisung)

Syntax der MERGE-Anweisung von Oracle

MERGE [ hint ]
   INTO [ schema. ] { table | view } [ t_alias ]
   USING { [ schema. ] { table | view }
         | ( subquery )
         } [ t_alias ]
   ON ( condition )
   [ merge_update_clause ]
   [ merge_insert_clause ]
   [ error_logging_clause ] ;

merge_update_clause := WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
           [, column = { expr | DEFAULT } ]...
[ where_clause ]
[ DELETE where_clause ]

merge_insert_clause := WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr | DEFAULT }
          [, { expr | DEFAULT } ]...
       )
[ where_clause ]

error_logging_clause := LOG ERRORS 
  [ INTO [schema.] table ]
  [ (simple_expression) ]
  [ REJECT LIMIT { integer | UNLIMITED } ]

where_clause := WHERE condition
Copy
Syntax der MERGE-Anweisung von Snowflake Scripting
MERGE INTO <target_table> USING <source> ON <join_expr> 
{ matchedClause | notMatchedClause } [ ... ]

matchedClause ::= WHEN MATCHED [ AND <case_predicate> ] 
THEN { UPDATE SET <col_name> = <expr> [ , <col_name2> = <expr2> ... ] | DELETE } [ ... ]

notMatchedClause ::= WHEN NOT MATCHED [ AND <case_predicate> ] 
THEN INSERT [ ( <col_name> [ , ... ] ) ] VALUES ( <expr> [ , ... ] )
Copy

Beispielhafte Quellcode-Muster

Beispielhafte Hilfsdaten

Bemerkung

Dieser Code wurde zum besseren Verständnis der Beispiele ausgeführt:

Oracle
CREATE TABLE people_source (
    person_id INTEGER NOT NULL PRIMARY KEY,
    first_name VARCHAR2(20) NOT NULL,
    last_name VARCHAR2(20) NOT NULL,
    title VARCHAR2(10) NOT NULL
);

CREATE TABLE people_target (
    person_id INTEGER NOT NULL PRIMARY KEY,
    first_name VARCHAR2(20) NOT NULL,
    last_name VARCHAR2(20) NOT NULL,
    title VARCHAR2(10) NOT NULL
);

CREATE TABLE bonuses (
    employee_id NUMBER,
    bonus NUMBER DEFAULT 100
);

INSERT INTO people_target
VALUES (1, 'John', 'Smith', 'Mr');

INSERT INTO people_target
VALUES (2, 'alice', 'jones', 'Mrs');

INSERT INTO people_source
VALUES (2, 'Alice', 'Jones', 'Mrs.');

INSERT INTO people_source
VALUES (3, 'Jane', 'Doe', 'Miss');

INSERT INTO people_source
VALUES (4, 'Dave', 'Brown', 'Mr');

INSERT INTO
    bonuses(employee_id) (
        SELECT
            e.employee_id
        FROM
            hr.employees e,
            oe.orders o
        WHERE
            e.employee_id = o.sales_rep_id
        GROUP BY
            e.employee_id
    );
Copy
Snowflake
CREATE OR REPLACE TABLE people_source (
    person_id INTEGER NOT NULL PRIMARY KEY,
    first_name VARCHAR(20) NOT NULL,
    last_name VARCHAR(20) NOT NULL,
    title VARCHAR(10) NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE TABLE people_target (
    person_id INTEGER NOT NULL PRIMARY KEY,
    first_name VARCHAR(20) NOT NULL,
    last_name VARCHAR(20) NOT NULL,
    title VARCHAR(10) NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE TABLE bonuses (
    employee_id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
    bonus NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/ DEFAULT 100
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO people_target
VALUES (1, 'John', 'Smith', 'Mr');

INSERT INTO people_target
VALUES (2, 'alice', 'jones', 'Mrs');

INSERT INTO people_source
VALUES (2, 'Alice', 'Jones', 'Mrs.');

INSERT INTO people_source
VALUES (3, 'Jane', 'Doe', 'Miss');

INSERT INTO people_source
VALUES (4, 'Dave', 'Brown', 'Mr');

INSERT INTO bonuses(employee_id) (
    SELECT
        e.employee_id
    FROM
        hr.employees e,
        oe.orders o
    WHERE
        e.employee_id = o.sales_rep_id
    GROUP BY
        e.employee_id
);
Copy

Simple Case, MERGE-Anweisung

Oracle
MERGE INTO people_target pt USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN
UPDATE
SET
    pt.first_name = ps.first_name,
    pt.last_name = ps.last_name,
    pt.title = ps.title
    WHEN NOT MATCHED THEN
INSERT
    (
        pt.person_id,
        pt.first_name,
        pt.last_name,
        pt.title
    )
VALUES
    (
        ps.person_id,
        ps.first_name,
        ps.last_name,
        ps.title
    );

SELECT * FROM people_target;
Copy
Ergebnis

PERSON_ID

FIRST_NAME

LAST_NAME

TITLE

1

John

Smith

Mr

2

Alice

Jones

Mrs.

3

Jane

Doe

Miss

4

Dave

Brown

Mr

Snowflake
MERGE INTO people_target pt USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN
    UPDATE
SET
    pt.first_name = ps.first_name,
    pt.last_name = ps.last_name,
    pt.title = ps.title
WHEN NOT MATCHED THEN
INSERT
    (
        pt.person_id,
        pt.first_name,
        pt.last_name,
        pt.title
    )
VALUES
    (
        ps.person_id,
        ps.first_name,
        ps.last_name,
        ps.title
    );

SELECT * FROM
    people_target;
Copy
Ergebnis

PERSON_ID

FIRST_NAME

LAST_NAME

TITLE

1

John

Smith

Mr

2

Alice

Jones

Mrs.

3

Jane

Doe

Miss

4

Dave

Brown

Mr

MERGE-Anweisung mit DELETE- und WHERE-Klausel

Um eine Äquivalenz für die Anweisung DELETE und die WHERE-Klausel zu finden, ist es notwendig, die MERGE-Anweisung von Snowflake neu zu ordnen und einige Änderungen vorzunehmen.

Änderungen erforderlich:
  • Ersetzen Sie die DELETE where_clause von Oracle durch eine neue matchedClause von Snowflake mit der AND Prädikat-Anweisung

  • Ersetzen Sie die where_clause aus Oracles merge\_insert_clause durch eine AND Prädikat-Anweisung in der Snowflakes notMatchedClause

Oracle
MERGE INTO bonuses D USING (
    SELECT
        employee_id,
        salary,
        department_id
    FROM
        hr.employees
    WHERE
        department_id = 80
) S ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN
UPDATE
SET
    D.bonus = D.bonus + S.salary *.01 DELETE
WHERE
    (S.salary > 8000)
    WHEN NOT MATCHED THEN
INSERT
    (D.employee_id, D.bonus)
VALUES
    (S.employee_id, S.salary *.01)
WHERE
    (S.salary <= 8000);

SELECT * FROM bonuses ORDER BY employee_id;
Copy
Ergebnis

EMPLOYEE_ID

BONUS

153

180

154

175

155

170

159

180

160

175

161

170

164

72

165

68

166

64

167

62

171

74

172

73

173

61

179

62

Snowflake
--** SSC-FDM-OR0018 - SNOWFLAKE MERGE STATEMENT MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
MERGE INTO bonuses D USING (
 SELECT
     employee_id,
     salary,
     department_id
 FROM
     hr.employees
 WHERE
     department_id = 80) S ON (D.employee_id = S.employee_id)
    WHEN MATCHED AND
    (S.salary > 8000) THEN
 DELETE
    WHEN MATCHED THEN
 UPDATE SET
    D.bonus = D.bonus + S.salary *.01
    WHEN NOT MATCHED AND
    (S.salary <= 8000) THEN
 INSERT
 (D.employee_id, D.bonus)
VALUES
 (S.employee_id, S.salary *.01);

SELECT * FROM
bonuses
ORDER BY employee_id;
Copy
Ergebnis

EMPLOYEE_ID

BONUS

153

180

154

175

155

170

159

180

160

175

161

170

164

72

165

68

166

64

167

62

171

74

172

73

173

61

179

62

Warnung

In manchen Fällen funktionieren die vorgenommenen Änderungen nicht wie erwartet, wie im folgenden Beispiel:

Oracle
MERGE INTO people_target pt USING people_source ps ON (pt.person_id = ps.person_id)
WHEN MATCHED THEN
UPDATE
SET
    pt.first_name = ps.first_name,
    pt.last_name = ps.last_name,
    pt.title = ps.title DELETE
where
    pt.title = 'Mrs.'
    WHEN NOT MATCHED THEN
INSERT
    (
        pt.person_id,
        pt.first_name,
        pt.last_name,
        pt.title
    )
VALUES
    (
        ps.person_id,
        ps.first_name,
        ps.last_name,
        ps.title
    )
WHERE
    ps.title = 'Mr';

SELECT * FROM people_target;
Copy
Ergebnis

PERSON_ID

FIRST_NAME

LAST_NAME

TITLE

1

John

Smith

Mr

4

Dave

Brown

Mr

Snowflake
--** SSC-FDM-OR0018 - SNOWFLAKE MERGE STATEMENT MAY HAVE SOME FUNCTIONAL DIFFERENCES COMPARED TO ORACLE **
MERGE INTO people_target pt USING people_source ps ON (pt.person_id = ps.person_id)
    WHEN MATCHED AND
    pt.title = 'Mrs.' THEN
        DELETE
    WHEN MATCHED THEN
        UPDATE SET
    pt.first_name = ps.first_name,
    pt.last_name = ps.last_name,
    pt.title = ps.title
    WHEN NOT MATCHED AND
    ps.title = 'Mr' THEN
        INSERT
        (
            pt.person_id,
            pt.first_name,
            pt.last_name,
            pt.title
        )
VALUES
        (
            ps.person_id,
            ps.first_name,
            ps.last_name,
            ps.title
        );


SELECT * FROM
        people_target;
Copy
Ergebnis

PERSON_ID

FIRST_NAME

LAST_NAME

TITLE

1

John

Smith

Mr

2

Alice

Jones

Mrs.

4

Dave

Brown

Mr

Bekannte Probleme

1. Oracle’s error_logging_clause is not supported

Es gibt keine Entsprechung für die Klausel zur Fehlerprotokollierung in Snowflake Scripting.

2. Changed applied do not work as expected

Manchmal funktionieren die Änderungen, die vorgenommen wurden, um die Funktionsäquivalenz zwischen der MERGE-Anweisung von Oracle und der von Snowflake zu erreichen, nicht wie erwartet.

Zugehörige EWIs

  1. SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.

  2. SSC-FDM-OR0018: Die Merge-Anweisung funktioniert möglicherweise nicht wie erwartet

SELECTINTO-Anweisung

Übersetzungsreferenz zur Konvertierung der SELECT INTO-Anweisung von Oracle in Snowflake Scripting

Bemerkung

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

Beschreibung

Die Anweisung SELECT INTO ruft Werte aus einer oder mehreren Datenbanktabellen ab (was die SQL SELECT-Anweisung tut) und speichert sie in Variablen (was die SQL SELECT-Anweisung nicht tut). (Oracle PL/SQL Language Reference SELECT INTO Statement)

SELECT INTO-Syntax von Oracle

SELECT [ { DISTINCT | UNIQUE } | ALL ] select_list
    { into_clause | bulk_collect_into_clause } FROM rest-of-statement ;
Copy
Syntax der INTO-Klausel von Oracle
INTO { variable [, variable ]... | record )
Copy
Syntax von BULK COLLECT von Oracle
BULK COLLECT INTO { collection | :host_array }
  [, { collection | :host_array } ]...
Copy
SELECT INTO-Syntax von Snowflake Scripting
SELECT [ { ALL | DISTINCT } ]
    {
          [{<object_name>|<alias>}.]*
        | [{<object_name>|<alias>}.]<col_name>
        | [{<object_name>|<alias>}.]$<col_position>
        | <expr>
        [ [ AS ] <col_alias> ]
    }
    [ , ... ]
    INTO :<variable> [, :<variable> ... ]
    [...]
Copy

Beispielhafte Quellcode-Muster

Beispielhafte Hilfsdaten

Bemerkung

Dieser Code wurde zum besseren Verständnis der Beispiele ausgeführt:

Oracle
CREATE TABLE numbers_table(num integer, word varchar2(20));
INSERT INTO numbers_table VALUES (1, 'one');
CREATE TABLE aux_numbers_table(aux_num integer, aux_word varchar2(20));
Copy
Snowflake
CREATE OR REPLACE TABLE numbers_table (num integer,
word VARCHAR(20))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO numbers_table
VALUES (1, 'one');

CREATE OR REPLACE TABLE aux_numbers_table (aux_num integer,
aux_word VARCHAR(20))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

Simple Case, SELECT INTO-Anweisung

Oracle
CREATE OR REPLACE PROCEDURE proc_select_into_variables
AS
number_variable integer;
word_variable varchar2(20);
BEGIN 
	SELECT * INTO number_variable, word_variable FROM numbers_table;
	INSERT INTO aux_numbers_table VALUES(number_variable, word_variable);	
END;

CALL proc_select_into_variables();
SELECT * FROM aux_numbers_table;
Copy
Ergebnis

AUX_NUM

AUX_WORD

1

ein/e

Snowflake Scripting
CREATE OR REPLACE PROCEDURE proc_select_into_variables ()
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;
		word_variable VARCHAR(20);
	BEGIN
		SELECT * INTO
			:number_variable,
			:word_variable
		FROM
			numbers_table;
		INSERT INTO aux_numbers_table
		VALUES(:number_variable, :word_variable);
	END;
$$;

CALL proc_select_into_variables();

SELECT * FROM
	aux_numbers_table;
Copy
Ergebnis
|AUX_NUM|AUX_WORD|
|-------|--------|
|1      |one     |


Copy

Bekannte Probleme

1. BULK COLLECT INTO is not supported

Snowflake Scripting bietet keine Unterstützung der BULK COLLECT INTO-Klausel. Es ist jedoch möglich, ARRAY_AGG zu verwenden, um eine neue Variable zu erstellen. Weitere Informationen finden Sie im Abschnitt zu Massenoperationen der Sammlung.

2. Collections and records are not supported

Snowflake Scripting unterstützt nicht die Verwendung von Sammlungen oder Datensätzen. Es ist möglich, diese mithilfe von semistrukturierten Datentypen zu migrieren, wie in diesem Abschnitt erläutert.

Zugehörige EWIs

Keine zugehörigen EWIs.

Umgehungsmöglichkeit, um die Verwendung von Datensätzen zu simulieren

Warnung

Diese Seite ist veraltet, wurde aber aus Gründen der Kompatibilität belassen. Wenn Sie den aktualisierten Abschnitt sehen möchten, finden Sie entsprechende Informationen unter Sammlungen und Datensätze.

Beschreibung

In diesem Abschnitt wird beschrieben, wie Sie die Verhaltensweise von Oracle-Datensätzen in SELECT- und INSERT-Anweisungen simulieren können, indem Sie RESULTSET und CURSORS von Snowflake Scripting verwenden.

Snowflake Scripting RESULTSET und CURSOR

RESULTSET-Syntax von Snowflake
<resultset_name> RESULTSET [ DEFAULT ( <query> ) ] ;

LET <resultset_name> RESULTSET [ { DEFAULT | := } ( <query> ) ] ;

LET <resultset_name> RESULTSET [ { DEFAULT | := } ( <query> ) ] ;
Copy

Empfehlungen

Bemerkung

Für die folgenden Beispiele wurde dieser Code zum besseren Verständnis der Beispiele ausgeführt:

Oracle

CREATE TABLE numbers_table(num integer, word varchar2(20));
INSERT INTO numbers_table VALUES (1, 'one');
CREATE TABLE aux_numbers_table(aux_num integer, aux_word varchar2(20));
Copy
Snowflake
CREATE OR REPLACE TABLE numbers_table (num integer,
word VARCHAR(20))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

INSERT INTO numbers_table
VALUES (1, 'one');

CREATE OR REPLACE TABLE aux_numbers_table (aux_num integer,
aux_word VARCHAR(20))
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

RESULTSET und Cursor anstelle von Datensätzen verwenden

Oracle
CREATE OR REPLACE PROCEDURE proc_insert_select_resultset
AS
TYPE number_record_definition IS RECORD(
	rec_num numbers_table.num%type,
	rec_word numbers_table.word%type
);
number_record number_record_definition;
BEGIN 
	SELECT * INTO number_record FROM numbers_table;	
	INSERT INTO aux_numbers_table VALUES number_record;
END;

CALL proc_insert_select_resultset();
SELECT * FROM aux_numbers_table;
Copy
Ergebnis

AUX_NUM

AUX_WORD

1

ein/e

Snowflake
CREATE OR REPLACE PROCEDURE proc_insert_select_resultset ()
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 number_record_definition IS RECORD(
			rec_num numbers_table.num%type,
			rec_word numbers_table.word%type
		);
		number_record OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - number_record_definition DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
	BEGIN
		SELECT
			OBJECT_CONSTRUCT( *) INTO
			:number_record
		FROM
			numbers_table;
		INSERT INTO aux_numbers_table
		SELECT
			:number_record:REC_NUM,
			:number_record:REC_WORD;
	END;
$$;

CALL proc_insert_select_resultset();

SELECT * FROM
	aux_numbers_table;
Copy

mit Cursor

CREATE OR REPLACE PROCEDURE PUBLIC.proc_select_into()
RETURNS INTEGER
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
$$
DECLARE
    NUMBER_VARIABLE INTEGER;
    WORD_VARIABLE VARCHAR;
    NUMBER_RECORD RESULTSET;
BEGIN
    LET c2 CURSOR FOR NUMBER_RECORD;
    FOR row_variable IN c2 DO
        let var1 integer := row_variable.num;
        let var2 varchar := row_variable.word;
        INSERT INTO PUBLIC.aux_numbers_table VALUES(:var1, :var2);
    END FOR;
end;
$$;
Copy
Ergebnis

AUX_NUM

AUX_WORD

1

ein/e

Bekannte Probleme

1. Limitation in the use of RESULTSET

RESULTSET ist in seiner Verwendung sehr eingeschränkt. Wenn table(result_scan(last_query_id()))-Anweisung verwendet wird, sollte sie direkt nach der Ausführung der Abfrage RESULTSET verwendet werden. Weitere Informationen finden Sie unter diesem Link.

Zugehörige EWIs

  1. [SSC-EWI-0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.

  2. [SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.