Interne Tabellen (SQLScript)
Ähnlich zu ABAP kann man in SQLScript ebenfalls mit internen Tabellen arbeiten. Nachfolgend sind unterschiedliche Nutzungsbeispiele aufgeführt.
Eine Implementierung der untenstehenden Beispiele in Form einer Stored Procedure findet sich hier: https://github.com/mattxdev/openSAPHANA/blob/master/db/src/procedures/build_products.hdbprocedure https://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/master/db/src/procedures/build_products.hdbprocedure
Interne Tabellen und Variablen definieren
Interne Tabellen können mit TABLE
, vgl. Signatur der folgenden Procedure, oder mit DECLARE TABLE LIKE
erstellt werden. Normale Variablen können mit DECLARE
erstellt werden:
PROCEDURE "build_products"(
OUT ex_products TABLE(
PRODUCTID NVARCHAR(10),
CATEGORY NVARCHAR(20),
PRICE DECIMAL(15,2) ) )
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
declare lt_products table like :ex_products;
declare lv_index int = 0;
END
SELECT from DB
Befüllung der internen Tabelle per SELECT-Statement:
lt_products = SELECT PRODUCTID, CATEGORY, PRICE from "MD.Products";
INSERT
Beispiele für Befüllung von internen Tabellen, z.B. Zuweisung mit dem Inhalt einer anderen internen Tabelle:
:ex_products.INSERT(:lt_products);
Einfügen von Datensätzen mit Angabe des Datensatzes und eines Indexes:
:ex_products.INSERT(('ProductA','Software','1999.99'),1);
:ex_products.INSERT(('ProductB','Software','2999.99'),2);
:ex_products.INSERT(('ProductC','Software','3999.99'),3);
Datensätze an bestehender Stelle werden nach unten geschoben. Wenn eine Indexposition gewählt wird, die sich mehr, als eins nach dem letzten bestehenden Datensatz befindet, werden die Index-Positionen zwischen den bestehenden und den neuen Datensätzen mit leeren Datensätzen aufgefüllt.
UPDATE
DELETE
SEARCH
FOR-Loop
Referenz
SAP HANA SQLScript Reference for SAP HANA Platform 2.0 SPS04 v1.1 2019-10-31: https://help.sap.com/doc/6254b3bb439c4f409a979dc407b49c9b/2.0.04/en-US/SAP_HANA_SQL_Script_Reference_en.pdf