SlideShare ist ein Scribd-Unternehmen logo
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?

Html5
Html5Html5
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
Shahed Chowdhuri
 
Ncbi
NcbiNcbi
Spring Boot
Spring BootSpring Boot
Spring Boot
Jaran Flaath
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)
Gunith Devasurendra
 
CSS Selectors
CSS SelectorsCSS Selectors
CSS Selectors
Rachel Andrew
 
Installation of java and program execution
Installation of java and program executionInstallation of java and program execution
Installation of java and program execution
Rakhee Chhibber
 
Modern Static Site with GatsbyJS
Modern Static Site with GatsbyJSModern Static Site with GatsbyJS
Modern Static Site with GatsbyJS
Riza Fahmi
 
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
ScyllaDB
 
JAVA PPT Part-1 BY ADI.pdf
JAVA PPT Part-1 BY ADI.pdfJAVA PPT Part-1 BY ADI.pdf
JAVA PPT Part-1 BY ADI.pdf
Prof. Dr. K. Adisesha
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
Theo Jungeblut
 
PostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | EdurekaPostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | Edureka
Edureka!
 
Mongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.jsMongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.js
Yuriy Bogomolov
 
Angular Directives
Angular DirectivesAngular Directives
Angular Directives
iFour Technolab Pvt. Ltd.
 
Genomic databases
Genomic databasesGenomic databases
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
Jonathan Holloway
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
Jeevesh Pandey
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Matt Raible
 
React Django Presentation
React Django PresentationReact Django Presentation
React Django Presentation
Allison DiNapoli
 
Introducción práctica a JPA2
Introducción práctica a JPA2Introducción práctica a JPA2
Introducción práctica a JPA2
jion1987
 

Was ist angesagt? (20)

Html5
Html5Html5
Html5
 
ASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with OverviewASP.NET Core MVC + Web API with Overview
ASP.NET Core MVC + Web API with Overview
 
Ncbi
NcbiNcbi
Ncbi
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)Rediscovering Spring with Spring Boot(1)
Rediscovering Spring with Spring Boot(1)
 
CSS Selectors
CSS SelectorsCSS Selectors
CSS Selectors
 
Installation of java and program execution
Installation of java and program executionInstallation of java and program execution
Installation of java and program execution
 
Modern Static Site with GatsbyJS
Modern Static Site with GatsbyJSModern Static Site with GatsbyJS
Modern Static Site with GatsbyJS
 
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
 
JAVA PPT Part-1 BY ADI.pdf
JAVA PPT Part-1 BY ADI.pdfJAVA PPT Part-1 BY ADI.pdf
JAVA PPT Part-1 BY ADI.pdf
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
 
PostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | EdurekaPostgreSQL Tutorial For Beginners | Edureka
PostgreSQL Tutorial For Beginners | Edureka
 
Mongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.jsMongoose: MongoDB object modelling for Node.js
Mongoose: MongoDB object modelling for Node.js
 
Angular Directives
Angular DirectivesAngular Directives
Angular Directives
 
Genomic databases
Genomic databasesGenomic databases
Genomic databases
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
 
React Django Presentation
React Django PresentationReact Django Presentation
React Django Presentation
 
Introducción práctica a JPA2
Introducción práctica a JPA2Introducción práctica a JPA2
Introducción práctica a JPA2
 

Ähnlich wie Webinar ABAP Managed Database Procedures

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
Cadaxo GmbH
 
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
Cadaxo GmbH
 
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
Cadaxo GmbH
 
Five Finger Death Punch
Five Finger Death PunchFive Finger Death Punch
Five Finger Death Punch
MT AG
 
Ruby on Rails SS09 03
Ruby on Rails SS09 03Ruby on Rails SS09 03
Ruby on Rails SS09 03
Daniel Dengler
 
Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)
Ulrike Schwinn
 
Renderscript in Android 3.x
Renderscript in Android 3.xRenderscript in Android 3.x
Renderscript in Android 3.x
Dominik Helleberg
 
Webinar Modern ABAP
Webinar Modern ABAPWebinar Modern ABAP
Webinar Modern ABAP
Cadaxo GmbH
 
Webinar SAP/ABAP und Microsoft
Webinar  SAP/ABAP und MicrosoftWebinar  SAP/ABAP und Microsoft
Webinar SAP/ABAP und Microsoft
Cadaxo GmbH
 
Webinar - Boost your ABAP
Webinar - Boost your ABAPWebinar - Boost your ABAP
Webinar - Boost your ABAP
Cadaxo GmbH
 
Webinar - ABAP CDS Views
Webinar - ABAP CDS ViewsWebinar - ABAP CDS Views
Webinar - ABAP CDS Views
Cadaxo GmbH
 
Performance-Analyse mit Bordmitteln
Performance-Analyse mit BordmittelnPerformance-Analyse mit Bordmitteln
Performance-Analyse mit Bordmitteln
OPITZ CONSULTING Deutschland
 
MySQL - New Features 5.6
MySQL - New Features 5.6MySQL - New Features 5.6
MySQL - New Features 5.6FromDual GmbH
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
Cadaxo GmbH
 
Visuelle Gestaltung und Testdatenentwicklung mit BizDataX
Visuelle Gestaltung und Testdatenentwicklung mit BizDataXVisuelle Gestaltung und Testdatenentwicklung mit BizDataX
Visuelle Gestaltung und Testdatenentwicklung mit BizDataX
Dragan Kinkela
 
Clean code in ABAP
Clean code in ABAPClean code in ABAP
Clean code in ABAP
Cadaxo 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

Webinar - Entwurfsmuster in ABAP
Webinar - Entwurfsmuster in ABAPWebinar - Entwurfsmuster in ABAP
Webinar - Entwurfsmuster in ABAP
Cadaxo GmbH
 
Webinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 ReleaseinformationenWebinar ABAP 7.51 Releaseinformationen
Webinar ABAP 7.51 Releaseinformationen
Cadaxo GmbH
 
Webinar - SAP Gateway
Webinar  - SAP GatewayWebinar  - SAP Gateway
Webinar - SAP Gateway
Cadaxo GmbH
 
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
Cadaxo GmbH
 
SQL Cockpit 3.1 - Overview
SQL Cockpit 3.1 - OverviewSQL Cockpit 3.1 - Overview
SQL Cockpit 3.1 - Overview
Cadaxo GmbH
 
Webinar - SAP BOPF
Webinar - SAP BOPFWebinar - SAP BOPF
Webinar - SAP BOPF
Cadaxo GmbH
 
TDD mit ABAP Units
TDD mit ABAP UnitsTDD mit ABAP Units
TDD mit ABAP Units
Cadaxo GmbH
 
SQL Cockpit - Releasenotes 3.0
SQL Cockpit - Releasenotes 3.0SQL Cockpit - Releasenotes 3.0
SQL Cockpit - Releasenotes 3.0
Cadaxo GmbH
 
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 GmbH
 
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
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
 
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
Cadaxo GmbH
 
Funktionstests in SAP
Funktionstests in SAPFunktionstests in SAP
Funktionstests in SAP
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