SlideShare ist ein Scribd-Unternehmen logo
1 von 57
AMDP
ABAP Managed Database Procedures
Webinar, 31.1.2020, 10:00 Uhr
AMDPFöß
Johann Fößleitner
Senior Consultant at Cadaxo
eMail: johann.foessleitner@cadaxo.com
Twitter: @foessleitnerj
Beratungsschwerpunkte
• Konzeption & Management von Entwicklungsprojekten
• Qualitymanagement & Performanceoptimierung
• Clean Code
• S/4HANA Custom Development
• SAP Champion
AMDPDomi
Domi Bigl
Senior Consultant at Cadaxo
eMail: dominik.bigl@cadaxo.com
Twitter: @DomiBiglSAP
Beratungsschwerpunkte
• Konzeption & Management von Entwicklungsprojekten
• Qualitymanagement & Performanceoptimierung
• ABAP Units
• SAP Fiori, SAP UI5
AMDPUnsere nächsten Webinare
https://www.eventbrite.com/e/mission-abap-
unser-sap-champion-erzahlt-von-seinen-
erfahrungen-aus-seinen-begegnungen-mit-
kunden-tickets-91581164729
https://www.eventbrite.com/e/webinar-abap-
753754-releaseabhangige-anderungen-tickets-
91580067447
http://www.cadaxo.com
AMDPCadaxo Workshops
AMDPABAP SQL vor 7.40
SQL 92 Standard
Advanced Open SQL
Seit 7.40 SP5/SP8
Open SQL
 Open SQL vor 7.40
◦ Kein UNION oder UNION ALL
◦ Eingeschränkte JOIN Möglichkeiten
◦ Keine Expressions
◦ Kein Casting
◦ …
AMDPCode-to-Data / Code Push Down
Applikations
Server / ABAP
Datenbank
Traditionelle
Datenbank
Datenintensive
Berechnungen erfolgen
am Applikationsserver
(Data-to-Code) SAP HANA
Datenintensive Be-
rechnungen erfolgen
in der Datenbank
(Code-to-Data bzw.
Code Pushdown )
AMDPCode-to-Data / Code Push Down
1. Cadaxo Webinar 29.1.2016
 Code-to-Data
◦ ABAP Open SQL Expressions
◦ ABAP Core Data Services
◦ ABAP Managed Database Procedures
AMDP
ABAP Managed Database Procedures
AMDPAMDP
 Volle Leistungsfähigkeit von HANA mit AMDP
◦ Beste Performance bei komplexen Berechnungen
◦ HANA bietet mehr Möglichkeiten im analytischen Bereich bzw.
spezielle Funktionen
◦ Wenn ABAP SQL und CDS nicht ausreichen
 Einschränkungen
◦ AMDPs sind datenbankspezifische Entwicklungen
◦ AMDPs sind derzeit nur für SAP HANA verfügbar
AMDPAMDP
 AMDP – ABAP Managed Database Procedures
◦ ABAP Klassen als Container für SQLScript
 Stored Procedures und Datenbankfunktionen
 Komplexe Logiken möglich (IF/ELSE)
◦ Vollständig in ABAP integriert
 Code Completion, Navigation, Entwicklung, Debugging, Enhancement,
Transport, …
◦ Einfacher Zugriff auf erweiterte SAP HANA Möglichkeiten
 Z.B. Fuzzy Suche, Linguistic Suche, …
◦ Verfügbar seit 7.40 SP05
 AMDP Funktionen seit 7.50
AMDPAMDP Prozedur, AMDP Tabellenfunktion
AMDP
Prozedur
AMDP/CDS
Tabellenfunktion
AMDPAMDP-Framework
AMDP Prozedur AMDP-Funktionen für CDS-
Tabellenfunktionen
Aufruf aus ABAP Class( )->method( ) SELECT * FROM …
Implementierung Public Instance Method Public Statische Method
Lesend/schreibend lesend und schreibend Nur lesend
Parameterdefinition In der Methode In der DDL Definition
Parameter IMPORT, EXPORT u. (CHANGING) IMPORT und ein RETURNING
Mandantenhandling Nicht automatisch Automatisch möglich (Annotation)
AMDP
AMDP Prozedur
AMDPAMDP Definition
class zcl_amdp_demo definition.
public section.
interfaces if_amdp_marker_hdb.
methods amdp_demo importing value(i_param1) type bu_type default ‘1‘
exporting value(e_param2) type typ_but000
changing value(c_param3) type bu_partner.
endclass.
 Marker-Interface
◦ IF_AMDP_MARKER_HDB muss angegeben werden
AMDPAMDP Definition
class zcl_amdp_demo definition.
public section.
interfaces if_amdp_marker_hdb.
methods amdp_demo importing value(i_param1) type bu_type default ‘1‘
exporting value(e_param2) type typ_but000
changing value(c_param3) type bu_partner.
endclass.
 Parameterübergabe
◦ Übergabe erfolgt als Werteparameter
◦ Nur IMPORTING, EXPORTING und CHANGING möglich
AMDPAMDP Definition
class zcl_amdp_demo definition.
public section.
interfaces if_amdp_marker_hdb.
methods amdp_demo importing value(i_param1) type bu_type default ‘1‘
exporting value(e_param2) type typ_but000
changing value(c_param3) type bu_partner.
endclass.
 Vorgschlagswerte
◦ Vorschlagswerte beim Importing-Parametern möglich
AMDPAMDP Implementierung
class zcl_amdp_demo implementation.
method amdp_demo by database procedure
for hdb language sqlscript
options read-only
using but000.
et_but000 = select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Implementierung
◦ Implementierung als HANA SQLScript Prozedur
AMDPAMDP Implementierung
class zcl_amdp_demo implementation.
method amdp_demo by database procedure
for hdb language sqlscript
options read-only
using but000.
et_but000 = select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Options
◦ Optional kann read-only vorgegeben werden
AMDPAMDP Implementierung
class zcl_amdp_demo implementation.
method amdp_demo by database procedure
for hdb language sqlscript
options read-only
using but000.
et_but000 = select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Deklarationen
◦ ABAP Dictionary Objekte oder andere AMDP Methoden auf die
zugegriffen werden soll, müssen hier deklariert werden
AMDPAMDP Aufruf aus ABAP
class zcl_amdp_demo_call implemenation.
method call_from_abap.
new zcl_amdp_demo( )->amdp_demo( importing e_param2 = partners
changing c_param3 = first_partner ).
endmethod.
endclass.
 Aufruf aus ABAP
◦ Wie jede andere ABAP Methode
AMDP
Demo 1
AMDP Prozedur
AMDP
SQLScript
AMDPDeklarative vs. Imperative Programmierung
 Deklarative vs. Imperative Programmierung
◦ Deklarativ
 Spezifikation dessen, was ermittelt werden soll
 Für SQLScript bedeutet das:
◦ System legt den Lösungsweg fest und optimiert diesen
◦ Parallele Verarbeitung von unabhängigen Teilen
◦ Wiederholende Teile werden erkannt und nur einmal ausgeführt
◦ Eingeschränkte Anweisungen und Funktionen
◦ Imperativ
 Programmablauf wird selbst festgelegt
 IF/ELSE, WHILE, DDL, …
AMDP
Syntax: ABAP SQL vs. SQLScript
AMDPFeldliste - Alias
SELECT a~client, a~partner, a~name_last AS name
FROM but000 AS a
INNER JOIN but020 AS b
ON b~partner = a~partner
WHERE a~partner = @P_PARTN
AND a~type = '1’
ORDER BY name DESCENDING
INTO TABLE @DATA(result).
lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name
from but000 as a
inner join but020 as b on a.partner = b.partner
WHERE a.partner = :p_in
and a.type = '1’
order by a.name_last desc;
ABAP
SQLScript
 Feldliste
◦ ABAP: Alias = ~
◦ SQLScript: Alias = .
AMDPLokale Variablen und Parameter
SELECT a~client, a~partner, a~name_last AS name
FROM but000 AS a
INNER JOIN but020 AS b
ON b~partner = a~partner
WHERE a~partner = @P_PARTN
AND a~type = '1’
ORDER BY name DESCENDING
INTO TABLE @DATA(result).
lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name
from but000 as a
inner join but020 as b on a.partner = b.partner
WHERE a.partner = :p_in
and a.type = '1’
order by a.name_last desc;
ABAP
SQLScript
 Lokale Varialben und Parameter
◦ ABAP: Escaped/Prefixed mit @
◦ SQLScript: Escaped/Prefixed mit :
AMDPSortierung mit ORDER BY
SELECT a~client, a~partner, a~name_last AS name
FROM but000 AS a
INNER JOIN but020 AS b
ON b~partner = a~partner
WHERE a~partner = @P_PARTN
AND a~type = '1’
ORDER BY name DESCENDING
INTO TABLE @DATA(result).
lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name
from but000 as a
inner join but020 as b on a.partner = b.partner
WHERE a.partner = :p_in
and a.type = '1’
order by a.name_last desc;
ABAP
SQLScript
 Sortierung
◦ ABAP: ORDER BY <feldliste> ASCENDING | DESCENDING
◦ SQLScript: order by <feldliste> asc | desc
AMDPZweisung der Ergebnisse
SELECT a~client, a~partner, a~name_last AS name
FROM but000 AS a
INNER JOIN but020 AS b
ON b~partner = a~partner
WHERE a~partner = @P_PARTN
AND a~type = '1’
ORDER BY name DESCENDING
INTO TABLE @DATA(result).
lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name
from but000 as a
inner join but020 as b on a.partner = b.partner
WHERE a.partner = :p_in
and a.type = '1’
order by a.name_last desc;
ABAP
SQLScript
 Zweisung der Ergebnisse
◦ ABAP – INTO [ TABLE ] …
◦ SQLScript – Deklarativ: lt_result = …
AMDPZeilenende
SELECT a~client, a~partner, a~name_last AS name
FROM but000 AS a
INNER JOIN but020 AS b
ON b~partner = a~partner
WHERE a~partner = @P_PARTN
AND a~type = '1’
ORDER BY name DESCENDING
INTO TABLE @DATA(result).
lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name
from but000 as a
inner join but020 as b on a.partner = b.partner
WHERE a.partner = :p_in
and a.type = '1’
order by a.name_last desc;
ABAP
SQLScript
 Zeilenende
◦ ABAP: Punkt
◦ SQLScript: Strichpunkt
AMDP
Demo 2
AMDP Prozeduren
AMDP
CDS Tabellenfunktion
AMDPCDS Tabellenfunktion
@EndUserText.label: 'Demo CDS Function'
define table function zdd_cds_amdp_function
with parameters p_in : bu_partner
returns {
client : abap.clnt;
partner : bu_partner;
name_last : bu_namep_l;
}
implemented by method zcl_amdp_demo=>amdp_demo_cds
 CDS Funktion
◦ Name der CDS Funktion
CDS Table Function
AMDP
@EndUserText.label: 'Demo CDS Function'
define table function zdd_cds_amdp_function
with parameters p_in : bu_partner
returns {
client : abap.clnt;
partner : bu_partner;
name_last : bu_namep_l;
}
implemented by method zcl_amdp_demo=>amdp_demo_cds
 Eingangsparameter
◦ Nur IMPORTING möglich
CDS Table Function
CDS Tabellenfunktion
AMDP
@EndUserText.label: 'Demo CDS Function'
define table function zdd_cds_amdp_function
with parameters p_in : bu_partner
returns {
client : abap.clnt;
partner : bu_partner;
name_last : bu_namep_l;
}
implemented by method zcl_amdp_demo=>amdp_demo_cds
 Rückgabeparameter
◦ Definition der Struktur der Rückgabetabelle
◦ Falls die Funktion mandantenabhängig ist, muss der Mandant
angegeben werden.
CDS Table Function
CDS Tabellenfunktion
AMDP
@EndUserText.label: 'Demo CDS Function'
define table function zdd_cds_amdp_function
with parameters p_in : bu_partner
returns {
client : abap.clnt;
partner : bu_partner;
name_last : bu_namep_l;
}
implemented by method zcl_amdp_demo=>amdp_demo_cds
 Implementierung
◦ Definition, in welcher AMDP-Methode die Implementierung
vorgenommen ist
◦ Die CDS Entität kann bereits aktiviert werden, wenn die Methode
noch nicht vorhanden ist
CDS Table Function
CDS Tabellenfunktion
AMDPAMDP Definition
class zcl_amdp_demo definition.
public section.
interface if_amdp_marker_hdb.
class-methods amdp_demo_cds for table function zdd_cds_amdp_function.
endclass.
 Statische Methode
◦ Methoden für CDS Tabellenfunktionen müssen statisch definiert
sein
AMDP
class zcl_amdp_demo definition.
public section.
interface if_amdp_marker_hdb.
class-methods amdp_demo_cds for table function zdd_cds_amdp_function.
endclass.
 Zusatz
◦ Über den Zusatz FOR wird die CDS Tabellenfunktion bekannt
gegeben.
CDS Tabellenfunktion
AMDP
class zcl_amdp_demo implementation.
method amdp_demo_cds by database function
for hdb language sqlscript
options read-only
using but000.
return select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Implementierung
◦ Implementierung als HANA SQLScript Funktion
CDS Tabellenfunktion
AMDP
class zcl_amdp_demo implementation.
method amdp_demo_cds by database function
for hdb language sqlscript
options read-only
using but000.
return select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Options
◦ Optional – ist aber immer read-only
CDS Tabellenfunktion
AMDP
class zcl_amdp_demo implementation.
method amdp_demo_cds by database function
for hdb language sqlscript
options read-only
using but000.
return select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Deklarationen
◦ ABAP Dictionary Objekte oder andere AMDP Methoden auf die
zugegriffen werden soll, müssen hier deklariert werden
CDS Tabellenfunktion
AMDP
class zcl_amdp_demo implementation.
method amdp_demo_cds by database function
for hdb language sqlscript
options read-only
using but000.
return select distinct partner, name_last
from but000
where client = SESSION_CONTEXT('CLIENT')
and contains( name_last, :i_name_first, fuzzy( 0.7 ) );
endmethod.
endclass.
 Ergebnisrückgabe
◦ Tabellenartiges Ergebnis wird mit RETURN zurückgeliefert
CDS Tabellenfunktion
AMDP
class zcl_amdp_demo_call implementation.
method call_from_abap.
select * from zdd_cds_amdp_function( p_in = partner_id )
into table @data(partners).
endmethod.
endclass.
 Aufruf aus ABAP
◦ Ganz normal mit ABAP SQL
CDS Tabellenfunktion
AMDP
ABAP Managed Database Procedures
AMDPAlternativen zu AMDPs um SQLScript auszuführen
 AMDP/SQLScript Einschränkungen
◦ Keine DDL Statements erlaubt
 CREATE, DROP, …
◦ Keine Transaktionalen Kommandos erlaubt
 COMMIT, ROLLBACK
 Wäre z.B. über EXEC/ENDEXEC möglich (aber NICHT empfohlen)
◦ Zugriff nur auf DEFAULT Schema
◦ Gepufferte Tabellen können nicht geändert werden
◦ Kein automatisches Mandantenhandling
 SESSION_CONTEXT('CLIENT')
AMDPAMDP Debugging
 AMDP Debugging
◦ Nur mit ADT möglich
◦ Einige Einschränkungen gegenüber ABAP Debugging
 Keine Ersetzen von Werten, kein Sprung zur Zeile, …
AMDPAMDP BAdIs
 AMDP BAdIs
◦ Keine Filter verwendbar
◦ Es muss eine Fallback-Implementierung existieren
◦ Verfügbar seit 7.40 SP08
AMDPSekundäre DB Connections
 AMDP & Sekundäre DB Connections
◦ Sekundäre Datenbankverbindungen sind möglich
◦ Parametername: connection type DBCON_NAME
◦ Verfügbar seit 7.40 SP08
AMDP
ABAP
SQL
AMDP
Ja
Ja
Nein
Nein, dann ADBC
 ABAP SQL oder CDS Views
 SQL Expressions
 Common Table Expressions
 Global Temporary Tables
 …
 Datenbankunabhängig
 AMDP Prozedur
 AMDP Tablefunction (=CDS)
 Datenbankabhängig
 ADBC ABAP Database Connectivity
 Obsolet: EXEC SQL/ENDEXEC & CALL DATABASE …
 Datenbankabhängig
DB
Hints
Nein
 ABAP SQL: %_HINTS …
 CDS Views: Consumption.dbHints[ ]
 Datenbankabhängig
Ja
Entscheidungsbaum
AMDP
Ergänzende Materialien
AMDPThomas Jung – HANA Basics For Developers
https://www.youtube.com/playlist?list=PLoc6uc3ML1JR38-V46qhmGIKG07nXwO6X
AMDPDeveloper Tutorials
https://developers.sap.com/tutorials/abap-environment-amdp-profiling.html
AMDPSQLScript for SAP HANA – von Jörg Brandeis
ISBN 978-3-8362-6208-8
https://twitter.com/joerg_brandeis
AMDP
SAP Help Portal: ABAP Managed Database Procedures
(AMDP)
https://help.sap.com/viewer/6811c09434084fd1bc4f40e66913ce11/7.52.0/en-
US/3e7ce62892d243eca44499d3f5a54bff.html
ABAP Keyword Documentation: AMDP - ABAP Managed Database
Procedures
https://help.sap.com/doc/abapdocu_753_index_htm/7.53/en-US/index.htm?file=abenamdp.htm
Einführungs Blog auf developer.sap.com
https://blogs.sap.com/2014/01/22/abap-managed-database-procedures-introduction/
Weitere SAP Links
AMDPUnsere vergangenen Webinare
http://www.cadaxo.com/blog/
AMDPUnsere nächsten Webinare
https://www.eventbrite.com/e/mission-abap-
unser-sap-champion-erzahlt-von-seinen-
erfahrungen-aus-seinen-begegnungen-mit-
kunden-tickets-91581164729
https://www.eventbrite.com/e/webinar-abap-
753754-releaseabhangige-anderungen-tickets-
91580067447
http://www.cadaxo.com
AMDPIf you want to stay in touch …
https://twitter.com/domibiglsap
https://www.linkedin.com/in/dominik-bigl-9b98b68b
https://www.xing.com/profile/dominik_bigl
dominik.bigl@cadaxo.com
See you again!
Thank you for participating!
https://twitter.com/foessleitnerj
https://www.linkedin.com/in/johann-fößleitner-a9851b2a
https://www.xing.com/profile/johann_foessleitner
johann.foessleitner@cadaxo.com

Weitere ähnliche Inhalte

Was ist angesagt?

Scheduling bods jobs sequentially and conditionally
Scheduling bods jobs sequentially and conditionallyScheduling bods jobs sequentially and conditionally
Scheduling bods jobs sequentially and conditionally
Chandra Reddy
 
Abap slide exceptionshandling
Abap slide exceptionshandlingAbap slide exceptionshandling
Abap slide exceptionshandling
Milind Patil
 
4 internet programming
4 internet programming4 internet programming
4 internet programming
soner_kavlak
 
Sapbpc nw 10.0 master data load from bw to bpc
Sapbpc nw 10.0 master data load from bw to bpcSapbpc nw 10.0 master data load from bw to bpc
Sapbpc nw 10.0 master data load from bw to bpc
Satya
 
Call transaction method
Call transaction methodCall transaction method
Call transaction method
Kranthi Kumar
 
Introducing enhancement framework.doc
Introducing enhancement framework.docIntroducing enhancement framework.doc
Introducing enhancement framework.doc
Kranthi Kumar
 

Was ist angesagt? (20)

Db2 hadr commands
Db2 hadr commandsDb2 hadr commands
Db2 hadr commands
 
Scheduling bods jobs sequentially and conditionally
Scheduling bods jobs sequentially and conditionallyScheduling bods jobs sequentially and conditionally
Scheduling bods jobs sequentially and conditionally
 
Address mapping
Address mappingAddress mapping
Address mapping
 
Putting Firepower into the Next Generation Firewall
Putting Firepower into the Next Generation FirewallPutting Firepower into the Next Generation Firewall
Putting Firepower into the Next Generation Firewall
 
Beginner's Guide: Programming with ABAP on HANA
Beginner's Guide: Programming with ABAP on HANABeginner's Guide: Programming with ABAP on HANA
Beginner's Guide: Programming with ABAP on HANA
 
Abap slide exceptionshandling
Abap slide exceptionshandlingAbap slide exceptionshandling
Abap slide exceptionshandling
 
4 internet programming
4 internet programming4 internet programming
4 internet programming
 
Sapbpc nw 10.0 master data load from bw to bpc
Sapbpc nw 10.0 master data load from bw to bpcSapbpc nw 10.0 master data load from bw to bpc
Sapbpc nw 10.0 master data load from bw to bpc
 
15CS44 MP & MC module 5
15CS44 MP & MC  module 515CS44 MP & MC  module 5
15CS44 MP & MC module 5
 
Konfigurasi Routing OSPF Di MikroTik
Konfigurasi Routing OSPF Di MikroTikKonfigurasi Routing OSPF Di MikroTik
Konfigurasi Routing OSPF Di MikroTik
 
Loader
LoaderLoader
Loader
 
Hotspot on Mikrotik Router
Hotspot on Mikrotik RouterHotspot on Mikrotik Router
Hotspot on Mikrotik Router
 
ASPgems - kappa architecture
ASPgems - kappa architectureASPgems - kappa architecture
ASPgems - kappa architecture
 
HDFS Namenode High Availability
HDFS Namenode High AvailabilityHDFS Namenode High Availability
HDFS Namenode High Availability
 
Ozone: An Object Store in HDFS
Ozone: An Object Store in HDFSOzone: An Object Store in HDFS
Ozone: An Object Store in HDFS
 
wamp.ppt
wamp.pptwamp.ppt
wamp.ppt
 
Addressing modes of 80386
Addressing modes of 80386Addressing modes of 80386
Addressing modes of 80386
 
Call transaction method
Call transaction methodCall transaction method
Call transaction method
 
Sap abap real time questions
Sap abap real time questionsSap abap real time questions
Sap abap real time questions
 
Introducing enhancement framework.doc
Introducing enhancement framework.docIntroducing enhancement framework.doc
Introducing enhancement framework.doc
 

Ähnlich wie Webinar ABAP Managed Database Procedures

MySQL - New Features 5.6
MySQL - New Features 5.6MySQL - New Features 5.6
MySQL - New Features 5.6
FromDual GmbH
 

Ähnlich wie Webinar ABAP Managed Database Procedures (16)

Webinar - ABAP 7.50 Releaseabhängige Änderungen
Webinar - ABAP 7.50 Releaseabhängige ÄnderungenWebinar - ABAP 7.50 Releaseabhängige Änderungen
Webinar - ABAP 7.50 Releaseabhängige Änderungen
 
Webinar - ABAP Releasenotes 7.53/7.54
Webinar - ABAP Releasenotes 7.53/7.54Webinar - ABAP Releasenotes 7.53/7.54
Webinar - ABAP Releasenotes 7.53/7.54
 
Webinar ABAP 7.40 sp5/sp8 Releaseinformationen
Webinar ABAP 7.40 sp5/sp8 ReleaseinformationenWebinar ABAP 7.40 sp5/sp8 Releaseinformationen
Webinar ABAP 7.40 sp5/sp8 Releaseinformationen
 
Five Finger Death Punch
Five Finger Death PunchFive Finger Death Punch
Five Finger Death Punch
 
Ruby on Rails SS09 03
Ruby on Rails SS09 03Ruby on Rails SS09 03
Ruby on Rails SS09 03
 
Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)
 
Renderscript in Android 3.x
Renderscript in Android 3.xRenderscript in Android 3.x
Renderscript in Android 3.x
 
Webinar Modern ABAP
Webinar Modern ABAPWebinar Modern ABAP
Webinar Modern ABAP
 
Webinar SAP/ABAP und Microsoft
Webinar  SAP/ABAP und MicrosoftWebinar  SAP/ABAP und Microsoft
Webinar SAP/ABAP und Microsoft
 
Webinar - Boost your ABAP
Webinar - Boost your ABAPWebinar - Boost your ABAP
Webinar - Boost your ABAP
 
Webinar - ABAP CDS Views
Webinar - ABAP CDS ViewsWebinar - ABAP CDS Views
Webinar - ABAP CDS Views
 
Performance-Analyse mit Bordmitteln
Performance-Analyse mit BordmittelnPerformance-Analyse mit Bordmitteln
Performance-Analyse mit Bordmitteln
 
MySQL - New Features 5.6
MySQL - New Features 5.6MySQL - New Features 5.6
MySQL - New Features 5.6
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
 
Visuelle Gestaltung und Testdatenentwicklung mit BizDataX
Visuelle Gestaltung und Testdatenentwicklung mit BizDataXVisuelle Gestaltung und Testdatenentwicklung mit BizDataX
Visuelle Gestaltung und Testdatenentwicklung mit BizDataX
 
Clean code in ABAP
Clean code in ABAPClean code in ABAP
Clean code in ABAP
 

Mehr von Cadaxo GmbH

Abap 7 02 new features - new string functions
Abap 7 02   new features - new string functionsAbap 7 02   new features - new string functions
Abap 7 02 new features - new string functions
Cadaxo GmbH
 

Mehr von Cadaxo GmbH (13)

Webinar - Entwurfsmuster in ABAP
Webinar - Entwurfsmuster in ABAPWebinar - Entwurfsmuster in ABAP
Webinar - Entwurfsmuster in ABAP
 
Webinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 ReleaseinformationenWebinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 Releaseinformationen
 
Webinar - SAP Gateway
Webinar  - SAP GatewayWebinar  - SAP Gateway
Webinar - SAP Gateway
 
ABAP CodeRetreat 20.5.2017 Vienna - Refactoring
ABAP CodeRetreat 20.5.2017 Vienna - RefactoringABAP CodeRetreat 20.5.2017 Vienna - Refactoring
ABAP CodeRetreat 20.5.2017 Vienna - Refactoring
 
SQL Cockpit 3.1 - Overview
SQL Cockpit 3.1 - OverviewSQL Cockpit 3.1 - Overview
SQL Cockpit 3.1 - Overview
 
Webinar - SAP BOPF
Webinar - SAP BOPFWebinar - SAP BOPF
Webinar - SAP BOPF
 
TDD mit ABAP Units
TDD mit ABAP UnitsTDD mit ABAP Units
TDD mit ABAP Units
 
SQL Cockpit - Releasenotes 3.0
SQL Cockpit - Releasenotes 3.0SQL Cockpit - Releasenotes 3.0
SQL Cockpit - Releasenotes 3.0
 
Prüfen Sie Ihre ABAP SQL Abfragen auf SAP HANA Tauglichkeit
Prüfen Sie Ihre ABAP SQL Abfragen auf SAP HANA TauglichkeitPrüfen Sie Ihre ABAP SQL Abfragen auf SAP HANA Tauglichkeit
Prüfen Sie Ihre ABAP SQL Abfragen auf SAP HANA Tauglichkeit
 
Cadaxo SQL Cockpit 2.0 - Neue Features im Detail
Cadaxo SQL Cockpit 2.0 - Neue Features im DetailCadaxo SQL Cockpit 2.0 - Neue Features im Detail
Cadaxo SQL Cockpit 2.0 - Neue Features im Detail
 
Abap 7 02 new features - new string functions
Abap 7 02   new features - new string functionsAbap 7 02   new features - new string functions
Abap 7 02 new features - new string functions
 
Abap 7.02 new features - neue stringfunktionen
Abap 7.02   new features - neue stringfunktionenAbap 7.02   new features - neue stringfunktionen
Abap 7.02 new features - neue stringfunktionen
 
Funktionstests in SAP
Funktionstests in SAPFunktionstests in SAP
Funktionstests in SAP
 

Webinar ABAP Managed Database Procedures

  • 1. AMDP ABAP Managed Database Procedures Webinar, 31.1.2020, 10:00 Uhr
  • 2. AMDPFöß Johann Fößleitner Senior Consultant at Cadaxo eMail: johann.foessleitner@cadaxo.com Twitter: @foessleitnerj Beratungsschwerpunkte • Konzeption & Management von Entwicklungsprojekten • Qualitymanagement & Performanceoptimierung • Clean Code • S/4HANA Custom Development • SAP Champion
  • 3. AMDPDomi Domi Bigl Senior Consultant at Cadaxo eMail: dominik.bigl@cadaxo.com Twitter: @DomiBiglSAP Beratungsschwerpunkte • Konzeption & Management von Entwicklungsprojekten • Qualitymanagement & Performanceoptimierung • ABAP Units • SAP Fiori, SAP UI5
  • 6. AMDPABAP SQL vor 7.40 SQL 92 Standard Advanced Open SQL Seit 7.40 SP5/SP8 Open SQL  Open SQL vor 7.40 ◦ Kein UNION oder UNION ALL ◦ Eingeschränkte JOIN Möglichkeiten ◦ Keine Expressions ◦ Kein Casting ◦ …
  • 7. AMDPCode-to-Data / Code Push Down Applikations Server / ABAP Datenbank Traditionelle Datenbank Datenintensive Berechnungen erfolgen am Applikationsserver (Data-to-Code) SAP HANA Datenintensive Be- rechnungen erfolgen in der Datenbank (Code-to-Data bzw. Code Pushdown )
  • 8. AMDPCode-to-Data / Code Push Down 1. Cadaxo Webinar 29.1.2016  Code-to-Data ◦ ABAP Open SQL Expressions ◦ ABAP Core Data Services ◦ ABAP Managed Database Procedures
  • 10. AMDPAMDP  Volle Leistungsfähigkeit von HANA mit AMDP ◦ Beste Performance bei komplexen Berechnungen ◦ HANA bietet mehr Möglichkeiten im analytischen Bereich bzw. spezielle Funktionen ◦ Wenn ABAP SQL und CDS nicht ausreichen  Einschränkungen ◦ AMDPs sind datenbankspezifische Entwicklungen ◦ AMDPs sind derzeit nur für SAP HANA verfügbar
  • 11. AMDPAMDP  AMDP – ABAP Managed Database Procedures ◦ ABAP Klassen als Container für SQLScript  Stored Procedures und Datenbankfunktionen  Komplexe Logiken möglich (IF/ELSE) ◦ Vollständig in ABAP integriert  Code Completion, Navigation, Entwicklung, Debugging, Enhancement, Transport, … ◦ Einfacher Zugriff auf erweiterte SAP HANA Möglichkeiten  Z.B. Fuzzy Suche, Linguistic Suche, … ◦ Verfügbar seit 7.40 SP05  AMDP Funktionen seit 7.50
  • 12. AMDPAMDP Prozedur, AMDP Tabellenfunktion AMDP Prozedur AMDP/CDS Tabellenfunktion
  • 13. AMDPAMDP-Framework AMDP Prozedur AMDP-Funktionen für CDS- Tabellenfunktionen Aufruf aus ABAP Class( )->method( ) SELECT * FROM … Implementierung Public Instance Method Public Statische Method Lesend/schreibend lesend und schreibend Nur lesend Parameterdefinition In der Methode In der DDL Definition Parameter IMPORT, EXPORT u. (CHANGING) IMPORT und ein RETURNING Mandantenhandling Nicht automatisch Automatisch möglich (Annotation)
  • 15. AMDPAMDP Definition class zcl_amdp_demo definition. public section. interfaces if_amdp_marker_hdb. methods amdp_demo importing value(i_param1) type bu_type default ‘1‘ exporting value(e_param2) type typ_but000 changing value(c_param3) type bu_partner. endclass.  Marker-Interface ◦ IF_AMDP_MARKER_HDB muss angegeben werden
  • 16. AMDPAMDP Definition class zcl_amdp_demo definition. public section. interfaces if_amdp_marker_hdb. methods amdp_demo importing value(i_param1) type bu_type default ‘1‘ exporting value(e_param2) type typ_but000 changing value(c_param3) type bu_partner. endclass.  Parameterübergabe ◦ Übergabe erfolgt als Werteparameter ◦ Nur IMPORTING, EXPORTING und CHANGING möglich
  • 17. AMDPAMDP Definition class zcl_amdp_demo definition. public section. interfaces if_amdp_marker_hdb. methods amdp_demo importing value(i_param1) type bu_type default ‘1‘ exporting value(e_param2) type typ_but000 changing value(c_param3) type bu_partner. endclass.  Vorgschlagswerte ◦ Vorschlagswerte beim Importing-Parametern möglich
  • 18. AMDPAMDP Implementierung class zcl_amdp_demo implementation. method amdp_demo by database procedure for hdb language sqlscript options read-only using but000. et_but000 = select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Implementierung ◦ Implementierung als HANA SQLScript Prozedur
  • 19. AMDPAMDP Implementierung class zcl_amdp_demo implementation. method amdp_demo by database procedure for hdb language sqlscript options read-only using but000. et_but000 = select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Options ◦ Optional kann read-only vorgegeben werden
  • 20. AMDPAMDP Implementierung class zcl_amdp_demo implementation. method amdp_demo by database procedure for hdb language sqlscript options read-only using but000. et_but000 = select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Deklarationen ◦ ABAP Dictionary Objekte oder andere AMDP Methoden auf die zugegriffen werden soll, müssen hier deklariert werden
  • 21. AMDPAMDP Aufruf aus ABAP class zcl_amdp_demo_call implemenation. method call_from_abap. new zcl_amdp_demo( )->amdp_demo( importing e_param2 = partners changing c_param3 = first_partner ). endmethod. endclass.  Aufruf aus ABAP ◦ Wie jede andere ABAP Methode
  • 24. AMDPDeklarative vs. Imperative Programmierung  Deklarative vs. Imperative Programmierung ◦ Deklarativ  Spezifikation dessen, was ermittelt werden soll  Für SQLScript bedeutet das: ◦ System legt den Lösungsweg fest und optimiert diesen ◦ Parallele Verarbeitung von unabhängigen Teilen ◦ Wiederholende Teile werden erkannt und nur einmal ausgeführt ◦ Eingeschränkte Anweisungen und Funktionen ◦ Imperativ  Programmablauf wird selbst festgelegt  IF/ELSE, WHILE, DDL, …
  • 25. AMDP Syntax: ABAP SQL vs. SQLScript
  • 26. AMDPFeldliste - Alias SELECT a~client, a~partner, a~name_last AS name FROM but000 AS a INNER JOIN but020 AS b ON b~partner = a~partner WHERE a~partner = @P_PARTN AND a~type = '1’ ORDER BY name DESCENDING INTO TABLE @DATA(result). lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name from but000 as a inner join but020 as b on a.partner = b.partner WHERE a.partner = :p_in and a.type = '1’ order by a.name_last desc; ABAP SQLScript  Feldliste ◦ ABAP: Alias = ~ ◦ SQLScript: Alias = .
  • 27. AMDPLokale Variablen und Parameter SELECT a~client, a~partner, a~name_last AS name FROM but000 AS a INNER JOIN but020 AS b ON b~partner = a~partner WHERE a~partner = @P_PARTN AND a~type = '1’ ORDER BY name DESCENDING INTO TABLE @DATA(result). lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name from but000 as a inner join but020 as b on a.partner = b.partner WHERE a.partner = :p_in and a.type = '1’ order by a.name_last desc; ABAP SQLScript  Lokale Varialben und Parameter ◦ ABAP: Escaped/Prefixed mit @ ◦ SQLScript: Escaped/Prefixed mit :
  • 28. AMDPSortierung mit ORDER BY SELECT a~client, a~partner, a~name_last AS name FROM but000 AS a INNER JOIN but020 AS b ON b~partner = a~partner WHERE a~partner = @P_PARTN AND a~type = '1’ ORDER BY name DESCENDING INTO TABLE @DATA(result). lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name from but000 as a inner join but020 as b on a.partner = b.partner WHERE a.partner = :p_in and a.type = '1’ order by a.name_last desc; ABAP SQLScript  Sortierung ◦ ABAP: ORDER BY <feldliste> ASCENDING | DESCENDING ◦ SQLScript: order by <feldliste> asc | desc
  • 29. AMDPZweisung der Ergebnisse SELECT a~client, a~partner, a~name_last AS name FROM but000 AS a INNER JOIN but020 AS b ON b~partner = a~partner WHERE a~partner = @P_PARTN AND a~type = '1’ ORDER BY name DESCENDING INTO TABLE @DATA(result). lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name from but000 as a inner join but020 as b on a.partner = b.partner WHERE a.partner = :p_in and a.type = '1’ order by a.name_last desc; ABAP SQLScript  Zweisung der Ergebnisse ◦ ABAP – INTO [ TABLE ] … ◦ SQLScript – Deklarativ: lt_result = …
  • 30. AMDPZeilenende SELECT a~client, a~partner, a~name_last AS name FROM but000 AS a INNER JOIN but020 AS b ON b~partner = a~partner WHERE a~partner = @P_PARTN AND a~type = '1’ ORDER BY name DESCENDING INTO TABLE @DATA(result). lt_result = SELECT DISTINCT a.client, a.partner, a.name_last AS name from but000 as a inner join but020 as b on a.partner = b.partner WHERE a.partner = :p_in and a.type = '1’ order by a.name_last desc; ABAP SQLScript  Zeilenende ◦ ABAP: Punkt ◦ SQLScript: Strichpunkt
  • 33. AMDPCDS Tabellenfunktion @EndUserText.label: 'Demo CDS Function' define table function zdd_cds_amdp_function with parameters p_in : bu_partner returns { client : abap.clnt; partner : bu_partner; name_last : bu_namep_l; } implemented by method zcl_amdp_demo=>amdp_demo_cds  CDS Funktion ◦ Name der CDS Funktion CDS Table Function
  • 34. AMDP @EndUserText.label: 'Demo CDS Function' define table function zdd_cds_amdp_function with parameters p_in : bu_partner returns { client : abap.clnt; partner : bu_partner; name_last : bu_namep_l; } implemented by method zcl_amdp_demo=>amdp_demo_cds  Eingangsparameter ◦ Nur IMPORTING möglich CDS Table Function CDS Tabellenfunktion
  • 35. AMDP @EndUserText.label: 'Demo CDS Function' define table function zdd_cds_amdp_function with parameters p_in : bu_partner returns { client : abap.clnt; partner : bu_partner; name_last : bu_namep_l; } implemented by method zcl_amdp_demo=>amdp_demo_cds  Rückgabeparameter ◦ Definition der Struktur der Rückgabetabelle ◦ Falls die Funktion mandantenabhängig ist, muss der Mandant angegeben werden. CDS Table Function CDS Tabellenfunktion
  • 36. AMDP @EndUserText.label: 'Demo CDS Function' define table function zdd_cds_amdp_function with parameters p_in : bu_partner returns { client : abap.clnt; partner : bu_partner; name_last : bu_namep_l; } implemented by method zcl_amdp_demo=>amdp_demo_cds  Implementierung ◦ Definition, in welcher AMDP-Methode die Implementierung vorgenommen ist ◦ Die CDS Entität kann bereits aktiviert werden, wenn die Methode noch nicht vorhanden ist CDS Table Function CDS Tabellenfunktion
  • 37. AMDPAMDP Definition class zcl_amdp_demo definition. public section. interface if_amdp_marker_hdb. class-methods amdp_demo_cds for table function zdd_cds_amdp_function. endclass.  Statische Methode ◦ Methoden für CDS Tabellenfunktionen müssen statisch definiert sein
  • 38. AMDP class zcl_amdp_demo definition. public section. interface if_amdp_marker_hdb. class-methods amdp_demo_cds for table function zdd_cds_amdp_function. endclass.  Zusatz ◦ Über den Zusatz FOR wird die CDS Tabellenfunktion bekannt gegeben. CDS Tabellenfunktion
  • 39. AMDP class zcl_amdp_demo implementation. method amdp_demo_cds by database function for hdb language sqlscript options read-only using but000. return select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Implementierung ◦ Implementierung als HANA SQLScript Funktion CDS Tabellenfunktion
  • 40. AMDP class zcl_amdp_demo implementation. method amdp_demo_cds by database function for hdb language sqlscript options read-only using but000. return select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Options ◦ Optional – ist aber immer read-only CDS Tabellenfunktion
  • 41. AMDP class zcl_amdp_demo implementation. method amdp_demo_cds by database function for hdb language sqlscript options read-only using but000. return select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Deklarationen ◦ ABAP Dictionary Objekte oder andere AMDP Methoden auf die zugegriffen werden soll, müssen hier deklariert werden CDS Tabellenfunktion
  • 42. AMDP class zcl_amdp_demo implementation. method amdp_demo_cds by database function for hdb language sqlscript options read-only using but000. return select distinct partner, name_last from but000 where client = SESSION_CONTEXT('CLIENT') and contains( name_last, :i_name_first, fuzzy( 0.7 ) ); endmethod. endclass.  Ergebnisrückgabe ◦ Tabellenartiges Ergebnis wird mit RETURN zurückgeliefert CDS Tabellenfunktion
  • 43. AMDP class zcl_amdp_demo_call implementation. method call_from_abap. select * from zdd_cds_amdp_function( p_in = partner_id ) into table @data(partners). endmethod. endclass.  Aufruf aus ABAP ◦ Ganz normal mit ABAP SQL CDS Tabellenfunktion
  • 45. AMDPAlternativen zu AMDPs um SQLScript auszuführen  AMDP/SQLScript Einschränkungen ◦ Keine DDL Statements erlaubt  CREATE, DROP, … ◦ Keine Transaktionalen Kommandos erlaubt  COMMIT, ROLLBACK  Wäre z.B. über EXEC/ENDEXEC möglich (aber NICHT empfohlen) ◦ Zugriff nur auf DEFAULT Schema ◦ Gepufferte Tabellen können nicht geändert werden ◦ Kein automatisches Mandantenhandling  SESSION_CONTEXT('CLIENT')
  • 46. AMDPAMDP Debugging  AMDP Debugging ◦ Nur mit ADT möglich ◦ Einige Einschränkungen gegenüber ABAP Debugging  Keine Ersetzen von Werten, kein Sprung zur Zeile, …
  • 47. AMDPAMDP BAdIs  AMDP BAdIs ◦ Keine Filter verwendbar ◦ Es muss eine Fallback-Implementierung existieren ◦ Verfügbar seit 7.40 SP08
  • 48. AMDPSekundäre DB Connections  AMDP & Sekundäre DB Connections ◦ Sekundäre Datenbankverbindungen sind möglich ◦ Parametername: connection type DBCON_NAME ◦ Verfügbar seit 7.40 SP08
  • 49. AMDP ABAP SQL AMDP Ja Ja Nein Nein, dann ADBC  ABAP SQL oder CDS Views  SQL Expressions  Common Table Expressions  Global Temporary Tables  …  Datenbankunabhängig  AMDP Prozedur  AMDP Tablefunction (=CDS)  Datenbankabhängig  ADBC ABAP Database Connectivity  Obsolet: EXEC SQL/ENDEXEC & CALL DATABASE …  Datenbankabhängig DB Hints Nein  ABAP SQL: %_HINTS …  CDS Views: Consumption.dbHints[ ]  Datenbankabhängig Ja Entscheidungsbaum
  • 51. AMDPThomas Jung – HANA Basics For Developers https://www.youtube.com/playlist?list=PLoc6uc3ML1JR38-V46qhmGIKG07nXwO6X
  • 53. AMDPSQLScript for SAP HANA – von Jörg Brandeis ISBN 978-3-8362-6208-8 https://twitter.com/joerg_brandeis
  • 54. AMDP SAP Help Portal: ABAP Managed Database Procedures (AMDP) https://help.sap.com/viewer/6811c09434084fd1bc4f40e66913ce11/7.52.0/en- US/3e7ce62892d243eca44499d3f5a54bff.html ABAP Keyword Documentation: AMDP - ABAP Managed Database Procedures https://help.sap.com/doc/abapdocu_753_index_htm/7.53/en-US/index.htm?file=abenamdp.htm Einführungs Blog auf developer.sap.com https://blogs.sap.com/2014/01/22/abap-managed-database-procedures-introduction/ Weitere SAP Links
  • 57. AMDPIf you want to stay in touch … https://twitter.com/domibiglsap https://www.linkedin.com/in/dominik-bigl-9b98b68b https://www.xing.com/profile/dominik_bigl dominik.bigl@cadaxo.com See you again! Thank you for participating! https://twitter.com/foessleitnerj https://www.linkedin.com/in/johann-fößleitner-a9851b2a https://www.xing.com/profile/johann_foessleitner johann.foessleitner@cadaxo.com

Hinweis der Redaktion

  1. Sybase ist eine Tochterfirma der SAP
  2. AMDP Prozeduren (Methoden) werden aus der ABAP Umgebung aufgerufen AMDP Tabellenfunktionen sind CDS Tabellenfunktionen und werden über SELECT als CDS View aufgerufen oder können direkz aus AMDP Prozeduren aufgerufen werden
  3. Mandantenhandling in den CDS Funktionen über Annotation einstellbar:  @ClientHandling.algorithm:#SESSION_VARIABLE 
  4. SQL ist ein typisches Beispiel für deklarative Programmierung. Weitere bekannte Sprachen wären Haskell, Lisp, Prolog, XAML Imperative Sprachen wären neben ABAP natürlich auch z.B. C, C++ oder JAVA
  5. Bei schreibenden Zugriffen wäre der : nicht notwendig, da keine Verwechslungsgefahr mit einem Datenobjekt besteht. Es gibt einige Systemsymbole. Diese werden mit :: angesprochen. Z.B. ::ROWCOUNT enthält die Anzahl der zuletzt geänderten Datensätze
  6. Bei SQLScript kann bei der ORDER BY noch angegeben werden, wie mit NULL Werten umgegangen werden soll. NULL FIRST oder NULL LAST Bei SQLScript können auch die Spaltennummern 2, 3, 4, …. angegeben werden
  7. Sybase ist eine Tochterfirma der SAP
  8. Sybase ist eine Tochterfirma der SAP
  9. Sybase ist eine Tochterfirma der SAP
  10. Sybase ist eine Tochterfirma der SAP
  11. Sybase ist eine Tochterfirma der SAP
  12. Sybase ist eine Tochterfirma der SAP
  13. Sybase ist eine Tochterfirma der SAP