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.

  • 🧱 Valige, kuhu luua: Määrake protseduurid skeemi (kataloogi) või paketi (sisu) tasandil, olenevalt sellest, kuhu need paketi sees kuuluvad. SAP HANA andmemudel.
  • 📥 Kasutage parameetreid teadlikult: IN edastab sisendi, OUT tagastab väljundi, INOUT teeb mõlemat – nimetage need iga signatuuri selguse huvides.
  • 🔐 Valige SQL-i turvalisus hoolikalt: DEFINER töötab looja õigustega; INVOKER töötab helistaja õigustega — vali andmetele juurdepääsu poliitika põhjal.
  • 📚 Märgi kirjutuskaitstuks, kui see on võimalik: LOEB SQL-ANDMEID, dokumenteerib kavatsust, optimeerib planeerimist ja võimaldab protseduuri tulemuste vaate kaudu kuvada.
  • 🤖 Kasutage protseduuride koostamiseks tehisintellekti: Tehisintellekti assistendid muudavad lihtsa inglise keele loogika parameetrite, erandite käitlejate ja tulemusvaadetega CREATE PROCEDURE mallideks.

SAP HANA SQL-i salvestatud protseduur

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 jaoks ev_ ekspordiks ja iov_ 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 HANDLER korrektse veateate edastamise jaoks.
  • Väldi SELECT * protseduuride sees – nimetage veerud, mida te tegelikult vajate, et plaanid püsiksid stabiilsena.

KKK

Protseduuril võib olla mitu OUT-parameetrit, see võib väljastada DML-i ja seda saab käivitada käsuga CALL. Funktsioon tagastab ühe skalaari või tabeli väärtuse, töötab ilma kõrvalmõjudeta ja seda kasutatakse SELECT-, WHERE- või muude avaldiste sees.

Vaikimisi ja kõige levinum keel on SQLScript. HANA toetab ka R-i protseduuride jaoks, mis vajavad statistilisi teeke, ja L-i madala taseme skriptimise jaoks. SQLScript on õige valik peaaegu iga äriprotseduuri jaoks.

DEFINER käivitab protseduuri selle loonud kasutaja õigustega – see on kasulik, kui protseduur peaks juurde pääsema tabelitele, mida kutsuja otse ei näe. INVOKER käivitab kutsuja õigustega, mis on jagatud utiliidiprotseduuride puhul turvalisem.

Kasutage READS SQL DATA käsku alati, kui protseduur ainult loeb andmeid ja ei kirjuta neid kunagi. See dokumenteerib kavatsust, võimaldab tulemuste vaatamist ja laseb optimeerijal protseduuri agressiivsemalt planeerida.

Kasutage CALL-lauset: CALL proc_name (in_val, out_param);Rakendusest saate sisendid ja väljundid siduda JDBC, ODBC või Cloud SDK draiveri kaudu või avaldada protseduuri OData kaudu REST-klientidele.

Protseduuri lõpetamine koos DROP PROCEDURE proc_name; ja loo see uuesti protseduuriga CREATE OR REPLACE. SAP HANA ei toeta protseduuri ALTER PROCEDURE; standardmuster on CREATE OR REPLACE.

Tehisintellekti assistendid genereerivad CREATE PROCEDURE malle, pakuvad parameetrite nimesid, kirjutavad erandite käitlejaid ja tõlgivad lihtsa inglise keele loogika SQLScriptiks. Samuti osutavad nad puuduvatele skeemikvalifikatsioonidele ja riskantsele DML-ile kirjutuskaitstud kontekstides.

Jah. Tehisintellekti tööriistad annoteerivad SQLScripti rida-realt – selgitades, mida iga parameeter teeb, miks valiti konkreetne ühendus ja kus protseduur võib valede sisendite korral ebaõnnestuda –, muutes koodi ülevaatuse ja kasutuselevõtu palju kiiremaks.

Võta see postitus kokku järgmiselt: