SELECT SINGLE oder SELECT UP TO 1 ROWS?

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Hallo Kollegen
was nutzt ihr, SELECT SINGLE oder SELECT UP TO 1 ROWS...ENDSELECT bei einzeiligen Zugriffen, bei dem nicht der Primärschlüssel im WHERE zu finden ist?

Es gibt ja den nicht all zu alten Blogeintrag von Horst Keller: https://blogs.sap.com/2016/06/11/select ... to-1-rows/

Kollegen fragen mich aber immer wieder, warum ich denn ...UP TO 1 ROWS nutze statt SINGLE, weil die andere Schreibweise ja obsolet ist.

Was sind eure Gedanken zu dem Thema?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von qyurryus (Specialist / 112 / 86 / 45 ) »
Was antwortest du deinen Kollegen dann? 🙂
Ich sehe keinen Grund jemals das Wort "ENDSELECT" in einen Editor einzutippen. Obsolet, keine Performanceverbesserung und (wie man an deinem Beispiel sieht) verwirrend.

In beiden Varianten sollte allerdings ein ORDER BY verwendet werden, wenn der Schlüssel nicht spezifiziert werden kann (sollte man in Hinblick auf S4 aber anscheinend sowieso immer tun).

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Wenn ich weiß, dass z.B. ein eindeutiger Sekundärschlüssel existiert verwende ich trotz Horst ein SELECT SINGLE + Pragma.
Früher habe ich ansonsten auch für Teilprimärschlüsselzugriffe das SELECT SINGLE verwendet, wenn ich entweder wusste, dass es nur einen Ergebnissatz geben kann oder ich tatsächlich ( Auswahlaxiom 😇 ) einfach irgendeinen der Ergebnissätze haben wollte.
Inzwischen verwende ich tatsächlich die Version mit UP TO 1 ROWS - aber nicht NUR weil H.K. das so geschrieben hat sondern weil bei uns der Codeinspector meckert und ich stattdessen dann ein Pragma verwenden müsste. Und da ich Coding lieber ohne Pragmas abliefere, wenn der Aufwand vertretbar ist verwende ich halt das längere Konstrukt.

@qyurrus: Warum sollte man ein ORDER BY verwenden? Wenn es nur einen Rückgabewert geben kann oder man nur auf die Existenz prüfen möchte ist das nicht nötig und warum sollte man dann die DB damit belasten?

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ST22

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Letztlich ist das aber eine reine Formalie bzw du solltest dir überlegen was du mit deinem Konstrukt aussagen willst - egal welches du letztendlich verwendest.

Wenn man damit ausdrücken und zeigen! möchte, dass es nur einen Rückgabewert geben kann oder man einfach nur irgendeinen der Rückgabewerte verwenden möchte - egal welchen - oder einfach einen Test auf Existenz eines Rückgabewertes machen möchte mit anschließender SY-SUBRC-Abfrage kann man auf jeden Fall die Verwendung des SINGLE auch trotz Horst Keller begründen.

Wenn man hingegen formal sehr sauber sein möchte und Horst Kellers Ansicht folgt, dass ein SINGLE NUR bei vollständigem Primärschlüsselzugriff erlaubt sein sollte ( wobei ich wie gesagt abweichend von H.K. auch vollständigen und eindeutigen Sekundärschlüsseln die selbe Bedeutung zugestehe ) und du genau diese Tatsache mit deiner Codingstrecke darstellen möchtest ist das genau so gut begründbar.

Such dir eins der Sachen aus was dir mehr schmeckt und verwende das dann so( aber dann auch einheitlich in deinem Coding, es sein denn du kommentierst es besonders oder du entscheidest dich im Laufe der Jahre von einem Paradigma zum anderen umzusteigen. Und ja - das passiert. Manchmal sogar mehrfach hin und her im Laufe des Lebens, je nachdem was man so an Erfahrungen gemacht hat )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Ich stehe ganz klar auf Seiten ersterer Haltung. Codingformulierungen, die den Code aufblähen, ohne einen Performance- oder Lesbarkeitsnutzen zu stiften, mag ich gar nicht.
und Horst Kellers Ansicht folgt, dass ein SINGLE NUR bei vollständigem Primärschlüsselzugriff erlaubt sein sollte ( wobei ich wie gesagt abweichend von H.K. auch vollständigen und eindeutigen Sekundärschlüsseln die selbe Bedeutung zugestehe ) und du genau diese Tatsache mit deiner Codingstrecke darstellen möchtest
Diese (durchaus korrekte) Aussage von Dir muss man wörtlich nehmen, dann wird klar, wie unsinnig diese Geisteshaltung ist: Wer in seinem Code darstellen möchte, dass er Horst Kellers Ideologie folgt (anstatt den Code so zu schreiben, wie es für das Programm optimal wäre), der codet so.

Ideologie aber hat nach meiner Überzeugung nirgendwo etwas zu suchen, am allerwenigsten aber in Programmcode.

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin D&P:
Ich folge halt H.K.s Grundgedanken, dass mein Code darstellen soll, dass es technisch nur einen Datensatz geben kann, wenn ich ein SELECT SINGLE verwende. Wenn es zwar technisch mehrere geben könnte, aber in dem System in dem ich arbeite es semantisch nur einen geben kann oder ich halt nur einen von mehreren benötige verwende ich das andere Konstrukt.
Und dass ich lieber diese Information mit meinem Coding ausdrücken möchte als die anderen Möglichkeiten ist meine persönliche Entscheidung, durchaus angeregt von H.K.
DeathAndPain hat geschrieben:
13.04.2021 14:27
Wer in seinem Code darstellen möchte, dass er Horst Kellers Ideologie folgt (anstatt den Code so zu schreiben, wie es für das Programm optimal wäre), der codet so.
Ideologie aber hat nach meiner Überzeugung nirgendwo etwas zu suchen, am allerwenigsten aber in Programmcode.
Ich schätze, dass sich die Programmierstile der meisten hier sich in mehr oder weniger Punkten unterscheiden. Natürlich finde ich meinen Stil am Besten, denn wenn nicht würde ich ja einen anderen verwenden. Aber ich respektiere auch die Stile der anderen.
Aber mir widerstrebt einen Teilaspekt meines Programmierstils als "der Ideologie von Horst Keller folgend" beschreiben zu lassen, bloß weil er und ich an einer kleinen Stelle gleicher Meinung sind. Aber wenn du Ideologie mit Programmierstil gleich setzten willst widerspreche ich hier einfach deiner Meinung, dass das nichts im Programmcode zu suchen hat, es sei denn du folgst der Ideologie von Nicolas Bourbaki.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Na ja, Du hast ja selber geschrieben, dass Deine Umstellung auf UP TO 1 ROWS letztlich der Schikane durch den Code Inspector geschuldet gewesen ist und Du es zuvor - trotz Kenntnis von Horst Kellers Standpunkt - anders gemacht hast.

Worauf ich aber mit dem von mir Gesagten hinaus will: Der SELECT SINGLE beinhaltet nicht, dass es nur einen Datensatz geben kann, sonst würde ein nicht vollständig spezifizierter eindeutiger Schlüssel zu einer harten Fehlermeldung führen. Er liest sich auch wesentlich besser und schlanker, und ohne es getestet zu haben vermute ich auch, dass die Performance etwas besser ist, weil keine Schleife mit Datenbankcursor eröffnet wird, der dann per ENDSELECT wieder geschlossen werden muss.

Wie Du richtig gesagt hast, willst Du (bzw. Horst Keller) den Leser Deines Codes belehren, dass SINGLE nur verwendet werden sollte, wenn es nur einen Datensatz geben kann. Anders kann man es nicht beschreiben, denn das Schlüsselwort selbst gibt von seiner Funktionslität her diese Einschränkung nicht her. Tatsächlich wird ohnehin nur ein Bruchteil der Leser Deines Codes überhaupt genug von der Diskussion wissen, um zu verstehen, weshalb da UP TO 1 ROWS steht. Wenn Du das also nicht noch bei jeder Verwendung zusätzlich per Kommentarzeile erläuterst, dann kommt die Belehrung noch nicht mal beim Leser an, und es bleibt nur der schlechter lesbare Code übrig. Schreibst Du die Kommentarzeile aber, dann kannst Du auch SINGLE für schlankeren Code nehmen, denn dann wird der Leser ja durch Deinen Kommentar darauf hingewiesen, dass mehrere Fundergebnisse möglich sind. So oder so - die Belehrung im Codestil ergibt keinen Sinn.

Meine Überzeugung ist es, dass Code gut nachvollziehbar und performant, nicht aber oberlehrerhaft sein sollte. Ihn aus Belehrungsgründen unnötig kompliziert und schlecht lesbar zu gestalten, lehne ich als ideologisch geprägt ab. Das ist es, was ich mit "Ideologie" gemeint habe. Und auch Du bist ja offenbar so pragmatisch, dass Du Dich nicht dazu entschlossen hättest, wenn Du Dich nicht durch das - gleichfalls oberlehrerhafte - Gehabe des Code Inspectors in Verbindung mit entsprechenden Kundenpolicies (die offenbar Code als gut ansehen, wenn der Inspector schweigt und nicht, wenn er wirklich gut ist) dazu genötigt gesehen hättest.

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
7.52 Doku hat geschrieben: [...]
the following is recommended:
Use of the addition SINGLE to read a row specified in full precisely.
Use of the addition UP TO 1 ROWS to read a maximum of one row from a set of selected rows.
D&P,
ob du dich an die Empfehlung hältst oder nicht bleibt dir überlassen. Es ist ja nur eine Empfehlung und kein Gesetz. Respektiere aber, wenn andere sich anders entscheiden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: SELECT SINGLE oder SELECT UP TO 1 ROWS?

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Ich weiß, dass Horst Keller das geschrieben hat. Darüber diskutieren wir ja die ganze Zeit. Ich habe nicht mehr gemacht, als zu sagen, was ich von dieser Direktive und der in meinen Augen dahinterstehenden Geisteshaltung halte und aus welchen Gründen. Selbstverständlich ist es Dein gutes Recht, eine andere Meinung dazu zu haben.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
9457
Views
Performance: SELECT UP TO 1 ROWS vs. SELECT SINGLE
von roman1983 » 04.09.2008 14:29 • Verfasst in ABAP® für Anfänger
5
Antw.
2656
Views
Performanceproblem mit SELECT SINGLE
von Andreas G » 10.05.2006 15:01 • Verfasst in ABAP® Core
10
Antw.
6978
Views
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02 • Verfasst in ABAP® Core
2
Antw.
856
Views
Job hängt an select, wie herausfinden welches select
von dpz » 01.08.2019 10:23 • Verfasst in ABAP® Core
4
Antw.
18930
Views
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor einer Woche von rob_abc gelöst 8 / 8598
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2494
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3801

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor einer Woche von rob_abc gelöst 8 / 8598
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2494
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3801

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2903
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4711