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 dervalues_clausedessingle_table_insertangeben, anstatt eine Spaltenliste unterinsert_into_clausezu 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));
Snowflake¶
CREATE OR REPLACE TABLE PUBLIC.numbers_table (num integer,
word VARCHAR(20));
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 ;
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;
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 mehrereINSERT-,UPDATE- undDELETEDML-Anweisungen vermeiden.MERGEist eine deterministische Anweisung. Es ist nicht möglich, dieselbe Zeile der Zieltabelle mehrfach in derselbenMERGE-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
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> [ , ... ] )
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
);
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
);
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;
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;
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;
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;
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;
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;
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¶
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.
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
SELECTINTOruft Werte aus einer oder mehreren Datenbanktabellen ab (was die SQLSELECT-Anweisung tut) und speichert sie in Variablen (was die SQLSELECT-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 ;
Syntax der INTO-Klausel von Oracle¶
INTO { variable [, variable ]... | record )
Syntax von BULK COLLECT von Oracle¶
BULK COLLECT INTO { collection | :host_array }
[, { collection | :host_array } ]...
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> ... ]
[...]
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));
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"}}'
;
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;
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;
Ergebnis¶
|AUX_NUM|AUX_WORD|
|-------|--------|
|1 |one |
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> ) ] ;
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));
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"}}'
;
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;
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;
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;
$$;
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¶
[SSC-EWI-0036](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0036): Datentyp in einen anderen Datentyp konvertiert.
[SSC-EWI-0056](../../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/generalEWI. md#ssc-ewi-0056): Typ erstellen wird nicht unterstützt.