Pohranjena procedura u SAP HANA (SQL vodič)

⚡ Pametni sažetak

SAP HANA SQL pohranjena procedura je višekratno upotrebljiv, imenovani blok SQLScript-a koji izvodi određenu operaciju s podacima. Prihvaća parametre IN, OUT i INOUT, može se označiti kao samo za čitanje s READS SQL DATA i stvara se na razini sheme ili paketa pomoću sintakse CREATE PROCEDURE.

  • 🧱 Odaberite gdje želite kreirati: Definirajte procedure na razini sheme (Katalog) ili paketa (Sadržaj), ovisno o tome gdje pripadaju u SAP HANA model podataka.
  • 📥 Namjerno koristite parametre: IN prosljeđuje ulaz, OUT vraća izlaz, INOUT radi oboje - imenujte ih radi jasnoće u svakom potpisu.
  • 🔐 Pažljivo odaberite SQL SIGURNOST: DEFINER se izvršava s privilegijama kreatora; INVOKER se izvršava s privilegijama pozivatelja — odabir na temelju pravila pristupa podacima.
  • 📚 Označi samo za čitanje kada je to moguće: ČITA SQL PODATKE, dokumentira namjeru, optimizira planiranje i omogućuje prikaz postupka kroz prikaz rezultata.
  • 🤖 Koristite umjetnu inteligenciju za izradu postupaka: AI asistenti pretvaraju jednostavnu logiku u predloške CREATE PROCEDURE s parametrima, rukovateljima iznimkama i prikazima rezultata.

SAP HANA SQL pohranjena procedura

Što je SQL pohranjena procedura?

A pohranjena procedura je imenovana, ponovno upotrebljiva jedinica koda koja izvršava određeni zadatak. Procedure se mogu sastaviti u veće programe, što je temelj Modularni dizajnJedna procedura može pozvati drugu - pozivatelj se naziva pozivanje programa.

Procedure su blokovi za obradu koji se mogu ponovno koristiti s definiranim slijedom transformacija podataka. Mogu prihvatiti više ulaznih i izlaznih parametara i mogu se deklarirati samo za čitanje ili za čitanje i pisanje.

An SQL postupak u SAP HANNA može se kreirati na:

  • Razina sheme (Čvor kataloga) — upravlja se putem kataloga i vidljiv je svakom potrošaču s odgovarajućim privilegijama.
  • Razina paketa (Čvor sadržaja) — upravlja se kao artefakt u vrijeme dizajniranja unutar aplikacijskog paketa.

SAP Sintaksa pohranjenih procedura HANA

Opća sintaksa za stvaranje procedure u SAP HANA je prikazana dolje.

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 }

The CREATE PROCEDURE naredba stvara proceduru koristeći programski jezik određen od <lang>Zadani jezik je SQLScript.

Objašnjenje sintaktičkih elemenata

Donja tablica opisuje svaku klauzulu korištenu u sintaksi CREATE PROCEDURE.

Element Description
<proc_name> Naziv postupka.
<parameter_clause> Popis parametara, svaki označen s IN, OUT ili INOUT:
IN — ulaz samo za čitanje proslijeđen proceduri.
OUT — izlaz vraćen iz postupka.
IZLAZ — i prosljeđuje vrijednost i vraća modificiranu vrijednost.
LANGUAGE <lang> Programski jezik korišten u postupku. Zadano: SQLSCRIPT.
SQL SECURITY <mode> Sigurnosni način rada (zadano: DEFINER):
DEFINITOR — pokreće se s privilegijama kreatora procedure.
POZIVAC — izvodi se s privilegijama pozivatelja.
DEFAULT SCHEMA <default_schema_name> Shema koja se koristi za rješavanje nekvalificiranih objekata u tijelu procedure. Ako se izostavi, koristi se shema trenutne sesije.
READS SQL DATA Označava proceduru kao samo za čitanje. Ne može mijenjati podatke ili shemu, ne sadrži DDL ili DML i može pozivati ​​samo druge procedure samo za čitanje.
WITH RESULT VIEW <view_name> Definira prikaz rezultata koji se koristi kao izlaz procedure. Kada je prikaz rezultata prisutan, proceduru može upitati drugi SQL izjava kao da je tablica ili pogled.
SEQUENTIAL EXECUTION Prisiljava tijelo procedure da se izvršava sekvencijalno bez paralelizma.
<procedure_body> Glavni dio postupka, napisan u odabranom programskom jeziku.
HEADER ONLY Stvara samo svojstva procedure s OID-om, bez kompajliranja tijela. Korisno za deklaracije unaprijed.

Primjer: Izrada jednostavne pohranjene procedure

Primjer u nastavku stvara proceduru samo za čitanje koja vraća ukupnu prodaju za zadanog kupca.

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;

Pozovite proceduru sa:

CALL GET_CUSTOMER_SALES ('C0001', ?);

SAP HANA Studio (ili bilo koji JDBC/ODBC klijent) vraća vrijednost od ev_total u izlaznom parametru.

Pozivanje pohranjene procedure

Nakon što je kreirana, pohranjena procedura se poziva putem CALL naredbe, opcionalno unutar druge procedure, SQLScript funkcije ili vanjskog klijenta. Četiri najčešća obrasca pozivanja su:

  • Iz SQL-a: CALL my_proc(p1, p2, ?); — rezervirana mjesta vraćaju OUT vrijednosti.
  • Iz drugog postupka: CALL another_proc(:in1, :out1);
  • Iz aplikacije: povezivanje ulaznih parametara i čitanje izlaza putem JDBC-a, ODBC-a ili Cloud SDK-a.
  • Kao virtualna tablica: Kada se deklarira prikaz rezultata, upitajte proceduru s SELECT-om prema nazivu prikaza.

Najbolje prakse za HANA pohranjene procedure

Sljedeće navike održavaju HANA procedure čitljivima, učinkovitima i jednostavnima za održavanje:

  • Imenujte parametre s prefiksima: iv_ za unos, ev_ za izvoz, i iov_ za ulaz/izlaz.
  • Označi namjeru s READS SQL DATA gdje god je postupak zaista samo za čitanje.
  • Koristite SQL SECURITY INVOKER za dijeljene postupke koji bi trebali poštivati ​​privilegije pozivatelja.
  • Zamotajte svaki blok u BEGIN/END i tijelo neka bude kratko — tešku logiku podijelite na pomoćne procedure.
  • Obrada iznimki: koristiti DECLARE EXIT HANDLER za elegantno prijavljivanje grešaka.
  • Izbjegavajte ODABERI * unutar procedura — imenujte stupce koji su vam zapravo potrebni kako bi planovi ostali stabilni.

Pitanja i odgovori

Procedura može imati više OUT parametara, može izdati DML i poziva se s CALL. Funkcija vraća jednu skalarnu ili tabličnu vrijednost, izvršava se bez nuspojava i koristi se unutar SELECT, WHERE ili drugih izraza.

Zadani i najčešći jezik je SQLScript. HANA također podržava R za procedure kojima su potrebne statističke biblioteke i L za skriptiranje niske razine. SQLScript je pravi izbor za gotovo svaku poslovnu proceduru.

DEFINER pokreće proceduru s privilegijama korisnika koji ju je kreirao - korisno kada procedura treba pristupiti tablicama koje pozivatelj ne može izravno vidjeti. INVOKER se pokreće s privilegijama pozivatelja, što je sigurnije za dijeljene uslužne procedure.

Koristite READS SQL DATA kad god procedura samo čita podatke, a nikada ih ne zapisuje. To dokumentira namjeru, omogućuje prikaz rezultata i omogućuje optimizatoru agresivnije planiranje procedure.

Koristite naredbu CALL: CALL proc_name (in_val, out_param);Iz aplikacije povežite ulaze i izlaze putem JDBC, ODBC ili Cloud SDK upravljačkog programa ili izložite proceduru putem OData za REST klijente.

Izbaci proceduru s DROP PROCEDURE proc_name; i ponovno ga stvorite pomoću postupka CREATE OR REPLACE. SAP HANA ne podržava ALTER PROCEDURE; standardni obrazac je CREATE OR REPLACE.

AI asistenti generiraju predloške CREATE PROCEDURE, predlažu nazive parametara, pišu rukovatelje iznimkama i prevode logiku na običnom engleskom jeziku u SQLScript. Također ističu nedostajuće kvalifikacije sheme i rizične DML-ove unutar konteksta samo za čitanje.

Da. Alati umjetne inteligencije označavaju SQLScript redak po redak - objašnjavajući što svaki parametar radi, zašto je odabran određeni spoj i gdje bi postupak mogao propasti s lošim ulazima - što znatno ubrzava pregled koda i uvođenje u rad.

Sažmite ovu objavu uz: