Salvestatud protseduur SAP HANA (SQL-i õpetus)
⚡ Nutikas kokkuvõte
SAP HANA SQL-i salvestatud protseduur on korduvkasutatav, nimega SQLScripti plokk, mis sooritab kindla andmetoimingu. See aktsepteerib parameetreid IN, OUT ja INOUT, selle saab märkida kirjutuskaitstuks käsuga READS SQL DATA ning see luuakse skeemi või paketi tasemel, kasutades süntaksit CREATE PROCEDURE.

Mis on SQL-i salvestatud protseduur?
A salvestatud protseduur on nimetatud, korduvkasutatav koodiüksus, mis täidab kindlat ülesannet. Protseduuridest saab koostada suuremaid programme, mis on aluseks moodulitenaÜks protseduur saab kutsuda teist – kutsujat nimetatakse kutsuv programm.
Protseduurid on korduvkasutatavad töötlusplokid, millel on määratletud andmeteisenduste jada. Need võivad vastu võtta mitu sisend- ja väljundparameetrit ning neid saab deklareerida kirjutuskaitstud või lugemis-kirjutuskaitstud.
An SQL protseduur sisse SAP HANNA saab luua aadressil:
- Skeemi tase (Kataloogisõlm) – hallatakse kataloogi kaudu ja on nähtav igale õigete õigustega tarbijale.
- Paketi tase (Sisusõlm) — hallatakse disainiaja artefaktina rakenduspaketi sees.
SAP HANA salvestatud protseduuride süntaks
Protseduuri loomise üldine süntaks SAP HANA on näidatud allpool.
CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>]
[SQL SECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
[READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
{ BEGIN [SEQUENTIAL EXECUTION]
<procedure_body>
END
| HEADER ONLY }
. CREATE PROCEDURE lause loob protseduuri, kasutades programmeerimiskeelt, mis on määratud <lang>Vaikimisi keel on SQLScript.
Süntaksi elementide selgitus
Allolev tabel kirjeldab kõiki CREATE PROCEDURE süntaksis kasutatavaid klausleid.
| Element | Kirjeldus |
|---|---|
<proc_name> |
Protseduuri nimi. |
<parameter_clause> |
Parameetrite loend, igaüks tähistatud IN, OUT või INOUT-na: • IN — protseduurile edastatakse kirjutuskaitstud sisend. • OUT — protseduuri tagastatud väljund. • SISSESÕIT — edastab nii väärtuse kui ka tagastab muudetud väärtuse. |
LANGUAGE <lang> |
Protseduuris kasutatav programmeerimiskeel. Vaikimisi: SQLSCRIPT. |
SQL SECURITY <mode> |
Turvarežiim (vaikimisi: DEFINER): • MÄÄRATLUS — töötab protseduuri looja õigustega. • INVOKER — töötab helistaja õigustega. |
DEFAULT SCHEMA <default_schema_name> |
Skeem, mida kasutatakse protseduuri põhiosas kvalifitseerimata objektide lahendamiseks. Kui see puudub, kasutatakse praeguse seansi skeemi. |
READS SQL DATA |
Märgib protseduuri kirjutuskaitstud protseduuriks. See ei saa andmeid ega skeemi muuta, ei sisalda DDL-i ega DML-i ning saab kutsuda ainult teisi kirjutuskaitstud protseduure. |
WITH RESULT VIEW <view_name> |
Määrab protseduuri väljundina kasutatava tulemusvaate. Kui tulemusvaade on olemas, saab protseduuri kohta päringuid esitada teine. SQL lauset nii, nagu oleks see tabel või vaade. |
SEQUENTIAL EXECUTION |
Sunnib protseduuri sisu järjestikku ilma paralleelsuseta käivituma. |
<procedure_body> |
Protseduuri põhiosa, mis on kirjutatud valitud programmeerimiskeeles. |
HEADER ONLY |
Loob ainult protseduuri omadused koos objekti identifikaatoriga (OID), ilma sisu kompileerimata. Kasulik edasiste deklaratsioonide jaoks. |
Näide: lihtsa salvestatud protseduuri loomine
Allolev näide loob kirjutuskaitstud protseduuri, mis tagastab antud kliendi müügi kogusumma.
CREATE PROCEDURE GET_CUSTOMER_SALES (
IN iv_customer_id NVARCHAR(10),
OUT ev_total DECIMAL(15,2)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
SELECT SUM(NET_VALUE) INTO ev_total
FROM "SALES"."ORDERS"
WHERE CUSTOMER_ID = :iv_customer_id;
END;
Kutsuge protseduuri välja järgmiselt:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (või mis tahes JDBC/ODBC klient) tagastab väärtuse ev_total väljundparameetris.
Salvestatud protseduuri kutsumine
Kui salvestatud protseduur on loodud, käivitatakse see selle kaudu. CALL lause, valikuliselt teise protseduuri, SQLScripti funktsiooni või välise kliendi sees. Neli kõige levinumat kutsumismustrit on:
- SQL-ist:
CALL my_proc(p1, p2, ?);— kohatäited tagastavad OUT-väärtused. - Teisest protseduurist:
CALL another_proc(:in1, :out1); - Rakendusest: sisendparameetrite sidumine ja väljundi lugemine JDBC, ODBC või Cloud SDK kaudu.
- Virtuaalse tabelina: Kui tulemusvaade deklareeritakse, päritakse protseduurile vaate nime suhtes SELECT-käsuga.
HANA salvestatud protseduuride parimad tavad
Allolevad harjumused hoiavad HANA protseduurid loetavate, toimivate ja hõlpsasti hooldatavatena:
- Nimeta parameetrid eesliidetega:
iv_sisendi jaoksev_ekspordiks jaiov_sisendi/väljundi jaoks. - Märgi kavatsus READS SQL DATA abil kõikjal, kus protseduur on tõeliselt kirjutuskaitstud.
- Kasutage SQL-i TURVAKUTSIJAT jagatud protseduuride jaoks, mis peaksid austama helistaja õigusi.
- Mähi iga plokk BEGIN/END sisse ja hoia põhiosa lühikesena – jaga raske loogika abiprotseduurideks.
- Erandite käsitlemine: kasutama
DECLARE EXIT HANDLERkorrektse veateate edastamise jaoks. - Väldi SELECT * protseduuride sees – nimetage veerud, mida te tegelikult vajate, et plaanid püsiksid stabiilsena.
