Procedura memorizzata in SAP HANA (Tutorial SQL)
โก Riepilogo intelligente
SAP Una stored procedure SQL di HANA รจ un blocco di codice SQLScript riutilizzabile e denominato che esegue una specifica operazione sui dati. Accetta parametri IN, OUT e INOUT, puรฒ essere contrassegnata come di sola lettura con READS SQL DATA e viene creata a livello di schema o di pacchetto utilizzando la sintassi CREATE PROCEDURE.

Che cos'รจ una stored procedure SQL?
A Stored procedure รจ un'unitร di codice denominata e riutilizzabile che esegue un compito specifico. Le procedure possono essere composte in programmi piรน grandi, che costituiscono il fondamento di design modulare. Una procedura puรฒ chiamarne un'altra: il chiamante รจ detto il programma di chiamata.
Le procedure sono blocchi di elaborazione riutilizzabili con una sequenza definita di trasformazioni di dati. Possono accettare piรน parametri di input e output e possono essere dichiarate di sola lettura o di lettura/scrittura.
An SQL procedura dentro SAP HANA puรฒ essere creato a:
- Livello dello schema (Nodo del catalogo) โ gestito tramite il catalogo e visibile a ogni consumatore dotato dei privilegi appropriati.
- Livello del pacchetto (Nodo di contenuto) โ gestito come artefatto in fase di progettazione all'interno di un pacchetto applicativo.
SAP Sintassi delle stored procedure HANA
La sintassi generale per la creazione di una procedura in SAP HANA รจ mostrato di seguito.
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 }
Migliori CREATE PROCEDURE l'istruzione crea una procedura utilizzando il linguaggio di programmazione specificato da <lang>Il linguaggio predefinito รจ SQLScript.
Spiegazione degli elementi sintattici
La tabella seguente descrive ogni clausola utilizzata nella sintassi CREATE PROCEDURE.
| elemento | Descrizione |
|---|---|
<proc_name> |
Nome della procedura. |
<parameter_clause> |
Elenco dei parametri, ciascuno contrassegnato come IN, OUT o INOUT: ยท XNUMXโฌ IN โ input di sola lettura passato alla procedura. ยท XNUMXโฌ OUT โ output restituito dalla procedura. ยท XNUMXโฌ IN USCITA โ entrambi accettano un valore in ingresso e restituiscono il valore modificato. |
LANGUAGE <lang> |
Linguaggio di programmazione utilizzato nella procedura. Predefinito: SQLSCRIPT. |
SQL SECURITY <mode> |
Modalitร di sicurezza (Predefinita: DEFINER): ยท XNUMXโฌ Definitore โ viene eseguito con i privilegi del creatore della procedura. ยท XNUMXโฌ INVOCATORE โ viene eseguito con i privilegi del chiamante. |
DEFAULT SCHEMA <default_schema_name> |
Schema utilizzato per risolvere gli oggetti non qualificati nel corpo della procedura. Se omesso, viene utilizzato lo schema della sessione corrente. |
READS SQL DATA |
Contrassegna la procedura come di sola lettura. Non puรฒ modificare dati o schema, non contiene istruzioni DDL o DML e puรฒ solo richiamare altre procedure di sola lettura. |
WITH RESULT VIEW <view_name> |
Definisce la vista dei risultati utilizzata come output della procedura. Quando รจ presente una vista dei risultati, la procedura puรฒ essere interrogata da un'altra SQL dichiarazione come se fosse una tabella o una vista. |
SEQUENTIAL EXECUTION |
Costringe il corpo della procedura a essere eseguito in sequenza senza parallelismo. |
<procedure_body> |
Corpo principale della procedura, scritto nel linguaggio di programmazione selezionato. |
HEADER ONLY |
Crea solo le proprietร della procedura con un OID, senza compilare il corpo. Utile per le dichiarazioni anticipate. |
Esempio: Creare una stored procedure semplice
L'esempio seguente crea una procedura di sola lettura che restituisce il totale delle vendite per un determinato cliente.
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;
Richiamare la procedura con:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (o qualsiasi client JDBC/ODBC) restituisce il valore di ev_total nel parametro di output.
Chiamata di una stored procedure
Una volta creata, una stored procedure viene richiamata tramite CALL istruzione, facoltativamente all'interno di un'altra procedura, una funzione SQLScript o un client esterno. I quattro modelli di invocazione piรน comuni sono:
- Da SQL:
CALL my_proc(p1, p2, ?);โ i segnaposto restituiscono valori OUT. - Da un'altra procedura:
CALL another_proc(:in1, :out1); - Da un'applicazione: Associa i parametri di input e leggi l'output tramite JDBC, ODBC o Cloud SDK.
- Come tavolo virtuale: Quando viene dichiarata una vista dei risultati, interroga la procedura con una query SELECT sul nome della vista.
Migliori pratiche per le stored procedure HANA
Le abitudini descritte di seguito mantengono le procedure HANA leggibili, performanti e di facile manutenzione:
- Denominare i parametri con i prefissi:
iv_per l'input,ev_per l'esportazione eiov_per input/output. - Contrassegna l'intento con READS SQL DATA ovunque la procedura sia effettivamente di sola lettura.
- Utilizzare SQL SECURITY INVOKER per procedure condivise che devono rispettare i privilegi del chiamante.
- Avvolgi ogni blocco in BEGIN/END e mantieni il corpo del codice breve: suddividi la logica complessa in procedure ausiliarie.
- Gestire le eccezioni: uso
DECLARE EXIT HANDLERper una segnalazione degli errori elegante. - Evita SELECT * Procedure interne: nomina le colonne di cui hai effettivamente bisogno affinchรฉ i piani rimangano stabili.
