Αποθηκευμένη διαδικασία σε SAP HANA (Εκμάθηση SQL)
⚡ Έξυπνη Σύνοψη
SAP Η αποθηκευμένη διαδικασία HANA SQL είναι ένα επαναχρησιμοποιήσιμο, επώνυμο μπλοκ SQLScript που εκτελεί μια συγκεκριμένη λειτουργία δεδομένων. Δέχεται παραμέτρους IN, OUT και INOUT, μπορεί να επισημανθεί ως μόνο για ανάγνωση με READS SQL DATA και δημιουργείται σε επίπεδο σχήματος ή πακέτου χρησιμοποιώντας τη σύνταξη CREATE PROCEDURE.

Τι είναι μια αποθηκευμένη διαδικασία SQL;
A αποθηκευμένη διαδικασία είναι μια επώνυμη, επαναχρησιμοποιήσιμη μονάδα κώδικα που εκτελεί μια συγκεκριμένη εργασία. Οι διαδικασίες μπορούν να συντεθούν σε μεγαλύτερα προγράμματα, τα οποία αποτελούν τη βάση του Αρθρωτό σχεδιασμόΜία διαδικασία μπορεί να καλέσει μια άλλη — ο καλών αναφέρεται ως πρόγραμμα κλήσεων.
Οι διαδικασίες είναι επαναχρησιμοποιήσιμα μπλοκ επεξεργασίας με μια καθορισμένη ακολουθία μετασχηματισμών δεδομένων. Μπορούν να δεχτούν πολλαπλές παραμέτρους εισόδου και εξόδου και μπορούν να δηλωθούν ως μόνο για ανάγνωση ή για ανάγνωση-εγγραφή.
An SQL διαδικασία σε SAP HANA μπορεί να δημιουργηθεί στη διεύθυνση:
- Επίπεδο σχήματος (Κόμβος καταλόγου) — διαχειρίζεται μέσω του καταλόγου και είναι ορατό σε κάθε καταναλωτή με τα κατάλληλα δικαιώματα.
- Επίπεδο πακέτου (Κόμβος περιεχομένου) — διαχειρίζεται ως τεχνούργημα χρόνου σχεδίασης μέσα σε ένα πακέτο εφαρμογής.
SAP Σύνταξη αποθηκευμένης διαδικασίας HANA
Η γενική σύνταξη για τη δημιουργία μιας διαδικασίας στο SAP Το HANA εμφανίζεται παρακάτω.
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 Η εντολή δημιουργεί μια διαδικασία χρησιμοποιώντας τη γλώσσα προγραμματισμού που καθορίζεται από <lang>Η προεπιλεγμένη γλώσσα είναι η SQLScript.
Εξήγηση στοιχείων σύνταξης
Ο παρακάτω πίνακας περιγράφει κάθε όρο που χρησιμοποιείται στη σύνταξη CREATE PROCEDURE.
| Στοιχείο | Περιγραφή |
|---|---|
<proc_name> |
Όνομα της διαδικασίας. |
<parameter_clause> |
Λίστα παραμέτρων, καθεμία από τις οποίες σημειώνεται με IN, OUT ή INOUT: • IN — είσοδος μόνο για ανάγνωση που διαβιβάζεται στη διαδικασία. • OUT — αποτέλεσμα που επιστρέφεται από τη διαδικασία. • ΕΙΣΟΔΟΣ — και περνάει μια τιμή και επιστρέφει την τροποποιημένη τιμή. |
LANGUAGE <lang> |
Γλώσσα προγραμματισμού που χρησιμοποιείται στη διαδικασία. Προεπιλογή: SQLSCRIPT. |
SQL SECURITY <mode> |
Λειτουργία ασφαλείας (Προεπιλογή: DEFINER): • ΟΡΙΣΤΗΣ — εκτελείται με τα δικαιώματα του δημιουργού της διαδικασίας. • ΕΚΚΛΗΤΗΣ — εκτελείται με τα προνόμια του καλούντος. |
DEFAULT SCHEMA <default_schema_name> |
Σχήμα που χρησιμοποιείται για την επίλυση μη εξειδικευμένων αντικειμένων στο σώμα της διαδικασίας. Εάν παραλειφθεί, χρησιμοποιείται το τρέχον σχήμα συνεδρίας. |
READS SQL DATA |
Σημειώνει τη διαδικασία ως μόνο για ανάγνωση. Δεν μπορεί να τροποποιήσει δεδομένα ή σχήμα, δεν περιέχει DDL ή DML και μπορεί μόνο να καλέσει άλλες διαδικασίες μόνο για ανάγνωση. |
WITH RESULT VIEW <view_name> |
Ορίζει την προβολή αποτελεσμάτων που χρησιμοποιείται ως έξοδος της διαδικασίας. Όταν υπάρχει μια προβολή αποτελεσμάτων, η διαδικασία μπορεί να ερωτηθεί από μια άλλη. SQL πρόταση σαν να ήταν πίνακας ή προβολή. |
SEQUENTIAL EXECUTION |
Αναγκάζει το σώμα της διαδικασίας να εκτελεστεί διαδοχικά χωρίς παραλληλισμό. |
<procedure_body> |
Κύριο σώμα της διαδικασίας, γραμμένο στην επιλεγμένη γλώσσα προγραμματισμού. |
HEADER ONLY |
Δημιουργεί μόνο τις ιδιότητες της διαδικασίας με ένα OID, χωρίς μεταγλώττιση του σώματος. Χρήσιμο για δηλώσεις προώθησης. |
Παράδειγμα: Δημιουργία απλής αποθηκευμένης διαδικασίας
Το παρακάτω παράδειγμα δημιουργεί μια διαδικασία μόνο για ανάγνωση που επιστρέφει το σύνολο των πωλήσεων για έναν δεδομένο πελάτη.
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;
Καλέστε τη διαδικασία με:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP Το HANA Studio (ή οποιοδήποτε πρόγραμμα-πελάτης JDBC/ODBC) επιστρέφει την τιμή ev_total στην παράμετρο εξόδου.
Κλήση μιας αποθηκευμένης διαδικασίας
Μόλις δημιουργηθεί, μια αποθηκευμένη διαδικασία καλείται μέσω του CALL πρόταση, προαιρετικά μέσα σε μια άλλη διαδικασία, μια συνάρτηση SQLScript ή έναν εξωτερικό πελάτη. Τα τέσσερα πιο συνηθισμένα μοτίβα κλήσης είναι:
- Από SQL:
CALL my_proc(p1, p2, ?);— τα placeholders επιστρέφουν τιμές OUT. - Από μια άλλη διαδικασία:
CALL another_proc(:in1, :out1); - Από μια εφαρμογή: συνδέστε τις παραμέτρους εισόδου και διαβάστε την έξοδο μέσω JDBC, ODBC ή του Cloud SDK.
- Ως εικονικός πίνακας: Όταν δηλώνεται μια προβολή αποτελέσματος, υποβάλλεται ερώτημα στη διαδικασία με SELECT στο όνομα της προβολής.
Καλυτερα Πρακτικές για Αποθηκευμένες Διαδικασίες HANA
Οι παρακάτω συνήθειες διατηρούν τις διαδικασίες HANA ευανάγνωστες, αποδοτικές και εύκολες στη συντήρηση:
- Ονομάστε τις παραμέτρους με προθέματα:
iv_για εισαγωγή,ev_για εξαγωγή, καιiov_για είσοδο/έξοδο. - Σήμανση πρόθεσης με READS SQL DATA όπου η διαδικασία είναι πραγματικά μόνο για ανάγνωση.
- Χρήση του SQL SECURITY INVOKER για κοινές διαδικασίες που θα πρέπει να σέβονται τα προνόμια του καλούντος.
- Τυλίξτε κάθε μπλοκ σε BEGIN/END και διατηρήστε το κυρίως μέρος σύντομο — χωρίστε τη βαριά λογική σε βοηθητικές διαδικασίες.
- Χειρισμός εξαιρέσεων: χρήση
DECLARE EXIT HANDLERγια ομαλή αναφορά σφαλμάτων. - Αποφύγετε την ΕΠΙΛΟΓΗ * inside procedures — ονομάστε τις στήλες που πραγματικά χρειάζεστε, ώστε τα σχέδια να παραμένουν σταθερά.
