Lagrad procedur i SAP HANA (SQL-handledning)

โšก Smart sammanfattning

SAP HANA SQL Stored Procedure รคr ett รฅteranvรคndbart, namngivet block av SQLScript som utfรถr en specifik dataoperation. Det accepterar IN-, OUT- och INOUT-parametrar, kan markeras som skrivskyddat med READS SQL DATA och skapas pรฅ schema- eller paketnivรฅ med hjรคlp av CREATE PROCEDURE-syntaxen.

  • ๐Ÿงฑ Vรคlj var du vill skapa: Definiera procedurer pรฅ schemanivรฅ (katalognivรฅ) eller paketnivรฅ (innehรฅllsnivรฅ) beroende pรฅ var de hรถr hemma i SAP HANA-datamodell.
  • ๐Ÿ“ฅ Anvรคnd parametrar avsiktligt: IN skickar indata, OUT returnerar utdata, INOUT gรถr bรฅda โ€” namnge dem fรถr tydlighetens skull i varje signatur.
  • ๐Ÿ” Vรคlj SQL-Sร„KERHET noggrant: DEFINER kรถrs med skaparens privilegier; INVOKER kรถrs med anroparens โ€” val baserat pรฅ dataรฅtkomstpolicy.
  • ๐Ÿ“š Markera som skrivskyddad nรคr det รคr mรถjligt: Lร„SER SQL DATA dokumenterar avsikt, optimerar planering och gรถr att proceduren kan visas via en resultatvy.
  • ๐Ÿค– Anvรคnd AI fรถr att utarbeta procedurer: AI-assistenter omvandlar logik frรฅn vanlig engelska till mallar fรถr SKAPA PROCEDURE med parametrar, undantagshanterare och resultatvyer.

SAP HANA SQL-lagrad procedur

Vad รคr en SQL-lagrad procedur?

A lagrad procedur รคr en namngiven, รฅteranvรคndbar kodenhet som utfรถr en specifik uppgift. Procedurer kan sammansรคttas till stรถrre program, vilket รคr grunden fรถr Modulรคr designEn procedur kan anropa en annan โ€“ anroparen kallas samtalsprogram.

Procedurer รคr รฅteranvรคndbara bearbetningsblock med en definierad sekvens av datatransformationer. De kan acceptera flera in- och utparametrar och kan deklareras som skrivskyddade eller lรคs- och skrivskyddade.

An SQL fรถrfarande i SAP HANA kan skapas pรฅ:

  • Schemanivรฅ (Katalognod) โ€” hanteras via katalogen och รคr synlig fรถr alla konsumenter med rรคtt behรถrighet.
  • Paketnivรฅ (Innehรฅllsnod) โ€” hanteras som en designtidsartefakt inuti ett applikationspaket.

SAP Syntax fรถr lagrad HANA-procedur

Den allmรคnna syntaxen fรถr att skapa en procedur i SAP HANA visas nedan.

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 }

Ocuco-landskapet CREATE PROCEDURE programsats skapar en procedur med hjรคlp av programmeringssprรฅket som anges av <lang>Standardsprรฅket รคr SQLScript.

Syntaxelement fรถrklarade

Tabellen nedan beskriver varje klausul som anvรคnds i CREATE PROCEDURE-syntaxen.

Elementet BESKRIVNING
<proc_name> Namn pรฅ proceduren.
<parameter_clause> Lista รถver parametrar, var och en markerad IN, UT eller INOUT:
โ€ข IN โ€” skrivskyddad inmatning som skickas till proceduren.
โ€ข UT โ€” utdata som returneras frรฅn proceduren.
โ€ข INUT โ€” bรฅde skickar in ett vรคrde och returnerar det modifierade vรคrdet ut.
LANGUAGE <lang> Programmeringssprรฅk som anvรคnds i proceduren. Standard: SQLSCRIPT.
SQL SECURITY <mode> Sรคkerhetslรคge (standard: DEFINER):
โ€ข DEFINERARE โ€” kรถrs med behรถrigheterna hos procedurens skapare.
โ€ข INVOKER โ€” kรถrs med anroparens privilegier.
DEFAULT SCHEMA <default_schema_name> Schema som anvรคnds fรถr att matcha okvalificerade objekt i procedurtexten. Om det utelรคmnas anvรคnds det aktuella sessionsschemat.
READS SQL DATA Markerar proceduren som skrivskyddad. Den kan inte รคndra data eller schema, innehรฅller ingen DDL eller DML och kan bara anropa andra skrivskyddade procedurer.
WITH RESULT VIEW <view_name> Definierar resultatvyn som anvรคnds som procedurens utdata. Nรคr en resultatvy finns kan proceduren efterfrรฅgas av en annan SQL uttalande som om det vore en tabell eller en vy.
SEQUENTIAL EXECUTION Tvingar procedurtexten att kรถras sekventiellt utan parallellitet.
<procedure_body> Procedurens huvuddel, skriven i det valda programmeringssprรฅket.
HEADER ONLY Skapar endast procedurens egenskaper med ett OID, utan att kompilera brรถdtexten. Anvรคndbart fรถr framรฅtdeklarationer.

Exempel: Skapa en enkel lagrad procedur

Exemplet nedan skapar en skrivskyddad procedur som returnerar fรถrsรคljningssumman fรถr en given kund.

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;

Anropa proceduren med:

CALL GET_CUSTOMER_SALES ('C0001', ?);

SAP HANA Studio (eller nรฅgon JDBC/ODBC-klient) returnerar vรคrdet av ev_total i utdataparametern.

Anropa en lagrad procedur

Nรคr en lagrad procedur har skapats anropas den via CALL instruktion, eventuellt inuti en annan procedur, en SQLScript-funktion eller en extern klient. De fyra vanligaste anropsmรถnstren รคr:

  • Frรฅn SQL: CALL my_proc(p1, p2, ?); โ€” platshรฅllare returnerar UT-vรคrden.
  • Frรฅn en annan procedur: CALL another_proc(:in1, :out1);
  • Frรฅn en applikation: binda inparametrar och lรคsa utdata via JDBC, ODBC eller Cloud SDK.
  • Som en virtuell tabell: Nรคr en resultatvy deklareras, frรฅga proceduren med en SELECT mot vynamnet.

Bรคsta praxis fรถr lagrade HANA-procedurer

Vanorna nedan gรถr HANA-procedurer lรคsbara, effektiva och enkla att underhรฅlla:

  • Namnge parametrar med prefix: iv_ fรถr inmatning, ev_ fรถr export, och iov_ fรถr ingรฅng/utgรฅng.
  • Markera avsikt med READS SQL DATA รถverallt dรคr proceduren verkligen รคr skrivskyddad.
  • Anvรคnd SQL SECURITY INVOKER fรถr delade procedurer som bรถr respektera den som anropar privilegier.
  • Linda varje block i Bร–RJAN/SLUT och hรฅll kroppen kort โ€” dela upp tung logik i hjรคlpprocedurer.
  • Hantera undantag: anvรคndning DECLARE EXIT HANDLER fรถr smidig felrapportering.
  • Undvik Vร„LJ * inuti procedurer โ€” namnge de kolumner du faktiskt behรถver sรฅ att planerna fรถrblir stabila.

Vanliga frรฅgor

En procedur kan ha flera OUT-parametrar, kan utfรคrda DML och anropas med CALL. En funktion returnerar ett enda skalรคrt eller tabellvรคrde, kรถrs utan biverkningar och anvรคnds i SELECT, WHERE eller andra uttryck.

Standardsprรฅket och det vanligaste sprรฅket รคr SQLScript. HANA stรถder รคven R fรถr procedurer som behรถver statistiska bibliotek och L fรถr lรฅgnivรฅskript. SQLScript รคr rรคtt val fรถr nรคstan alla affรคrsprocedurer.

DEFINER kรถr proceduren med behรถrigheterna fรถr den anvรคndare som skapade den โ€“ anvรคndbart nรคr proceduren ska komma รฅt tabeller som anroparen inte kan se direkt. INVOKER kรถrs med anroparens behรถrigheter, vilket รคr sรคkrare fรถr procedurer med delade verktyg.

Anvรคnd READS SQL DATA nรคr proceduren bara lรคser data och aldrig skriver till den. Det dokumenterar avsikt, mรถjliggรถr resultatvisning och lรฅter optimeraren planera proceduren mer aggressivt.

Anvรคnd CALL-satsen: CALL proc_name (in_val, out_param);Frรฅn ett program, bind indata och utdata via JDBC-, ODBC- eller Cloud SDK-drivrutinen, eller exponera proceduren via OData fรถr REST-klienter.

Avsluta en procedur med DROP PROCEDURE proc_name; och รฅterskapa den med CREATE OR REPLACE-PROCEDUREN. SAP HANA stรถder inte ALTER PROCEDURE; standardmรถnstret รคr CREATE OR REPLACE.

AI-assistenter genererar mallar fรถr CREATE PROCEDURE, fรถreslรฅr parameternamn, skriver undantagshanterare och รถversรคtter logik pรฅ vanlig engelska till SQLScript. De pekar ocksรฅ ut saknade schemakvalifikationer och riskabla DML i skrivskyddade kontexter.

Ja. AI-verktyg kommenterar SQLScript rad fรถr rad โ€“ och fรถrklarar vad varje parameter gรถr, varfรถr en viss koppling valdes och var proceduren kan misslyckas med felaktiga indata โ€“ vilket gรถr kodgranskning och onboarding mycket snabbare.

Sammanfatta detta inlรคgg med: