Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
21 Beiträge • Vorherige Seite 2 von 2 (current)
21 Beiträge Vorherige Seite 2 von 2 (current)

Re: Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Der SORT macht gar nichts bei einer inline deklarierten Tabelle weil diese einen "EMPTY KEY" hat. Die Doku sagt das auch. https://help.sap.com/doc/abapdocu_751_i ... ty_key.htm unter "Critical use"

Somit hättest du "SORT lt_csks BY TABLE_LINE" machen können. Dann ware es auch mit dem BINARY_SEARCH gegangen.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
a-dead-trousers

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

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


Re: Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Beitrag von DeathAndPain (Top Expert / 1806 / 214 / 396 ) »
Komme offenbar spät, will aber auch noch meinen Senf dazu abgeben. 😁

Ich habe keine Zweifel, dass Dein Problem tatsächlich mit dem Fehlen eines Index bei Deiner internen Tabelle zu tun hat. Deswegen wirst Du mit der Umstellung auf eine SORTED TABLE auch erfolgreich gewesen sein; da kommst Du um die Angabe eines Primärindexes nämlich nicht herum.

Es wäre aber genauso auch mit Deiner Inline-Deklaration der internen Tabelle nebst BINARY SEARCH gegangen, und zwar ohne das Ganze schlechter lesbar zu machen. Du hättest nur den Umstand berücksichtigen müssen, dass eine inline deklarierte Tabelle keinen Deinen Wünschen entsprechenden Schlüssel hat und diesen daher bei Deinem SORT-Befehl explizit angeben müssen:

Code: Alles auswählen.

SORT lt_csks BY kostl.
ASCENDING muss man hingegen nicht angeben. Das ist ja explizit von der SAP dokumentiert, dass ASCENDING angenommen wird, wenn nichts angegeben wird, und es entspricht auch der menschlichen Intuition (wenn Du jemandem sagst, er solle eine Papierliste alphabetisch sortieren, wirst Du niemanden finden, der dies ungefragt absteigend tut). Das trotzdem hinzuschreiben, finde ich persönlich affig (sorry msfox), es sei denn, man hat auch DESCENDING-Spalten dabei und will es auf diesem Hintergrund deutlicher machen, welche Spalten aufsteigend und welche absteigend sortiert werden.

Gegen den BINARY SEARCH ist nichts einzuwenden; der hat schon immer einwandfrei funktioniert.
msfox hat geschrieben:Dafür setzte sich aber andere Entwickler hin und fangen plötzlich an, meinen Quellcode auf die neue Syntax umzustellen, nur um ein paar Zeilen zu sparen. Das hat zur Folge, dass es z.T. unlesbarer wird und beim Debuggen schwieriger wird.
Wenn das passiert, ist es in der Tat Mist. Meistens ist es allerdings so, dass die neue Syntax nicht nur kürzer, sondern tatsächlich auch besser lesbar ist. Nur muss man aufgeschlossen genug sein, sich damit auch zu beschäftigen und Übung zu sammeln. Wenn man in einem fremden Code die neue Syntax erstmals sieht, weil man sie nie selber ausprobiert hat, klar, dann ist sie komplett ungewohnt und fremd und damit schwer zu lesen und zu verstehen.

Ich kann mich noch erinnern, wie ich das erste Mal den REDUCE-Befehl gesehen und mich gefragt habe, um Himmels willen, wer soll denn da verstehen, was da passiert? Aber dann habe ich mich damit auseinandergesetzt und ihn selbst in meinen Programmen verwendet und bin mittlerweile der Meinung, dass er besser verständlich ist als der alte Weg über einen LOOP. Natürlich nur, wenn er nicht zu brutal verschachtelt ist. Da muss man ein gewisses Fingerspitzengefühl aufbringen.

In den allermeisten Fällen ist aber nach meiner Erfahrung der kürzere Code auch der besser lesbare und der längere enthält nur mehr Ballast. Wie den Doppelpunkt bei Deinem SORT. 😜

Re: Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Beitrag von Romaniac (Specialist / 198 / 57 / 26 ) »
Ha! Ich wusste es, der Doppelpunkt fällt auch noch jemand ins Auge ;-) Den hab ich stehen lassen weil es ursprünglich 2 Tabellen waren, die CSKS und CSKA, Kostenelemente wurden aber dann doch nicht benötigt.

Bei allem Anderen gebe ich Dir recht, ich wusste nicht dass die inline deklarierten Tabellen keinen Default Schlüssel haben. Schade finde ich da aber schon, dass ich bei der Inline Deklaration keinen Tabelletyp und Schlüssel angeben angeben kann, wäre ja kürzer und eleganter.
Geht nicht gibts nicht

Re: Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Beitrag von DeathAndPain (Top Expert / 1806 / 214 / 396 ) »
Das ist die Frage, ob es das wäre. Wie soll die Syntax dann genau aussehen? Wenn man mitten in den SELECT-Befehl eine Typdeklaration einer internen Tabelle mit reinbaut, wird der SELECT-Befehl unübersichtlich (was viele SELECT-Befehle ohnehin schon sind). Zudem soll man inline deklarierte Felder ja nur sehr lokal verwenden, also möglichst direkt nach dem SELECT verwursten.

Ich finde es auch kein Problem, nach dem SELECT einen SORT hinterherzuschieben oder alternativ mit ORDER BY zu arbeiten (je nachdem, ob man die entsprechende Rechenlast in der Datenbank oder im ABAP-Interpreter haben möchte. Für beides gibt es Argumente). Schade finde ich nur, dass man bei der 7.40-Syntax keinen BINARY SEARCH angeben kann und daher in diesem Fall auf den ollen READ TABLE-Befehl zurückgreifen muss (den ich außer in Spezialfällen wie diesen gar nicht mehr verwende, weil er einfach nur sperriger und schlechter zu lesen ist).

Außerhalb von SELECT-Befehlen kann man ja den Datentyp bei Inline-Deklarationen durchaus angeben, indem man VALUE, CONV oder eine der anderen derartigen Funktionen benutzt und darin anstatt der Raute den gewünschten Datentyp angibt.

Re: Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Beitrag von Romaniac (Specialist / 198 / 57 / 26 ) »
Select KOSTL, DATBI, DATAB
into table @data(lt_csks with unique sorted key KOSTL )
from CSKS
where...

Könnte ich mir vorstellen wenn mal lokal mal schnell was prüfen muss, SQL bietet ja selbst auch x Optionen, die es nicht lesbarer machen.
Der Sort nach dem Lesen stört mich ja garnicht, aber das Lesen der Itab mit Binary search ist halt mit Vorsicht zu geniesen
Geht nicht gibts nicht

Re: Binary search SY-SUBRC = 4 obwohl Eintrag vorhanden (HEX identisch)

Beitrag von DeathAndPain (Top Expert / 1806 / 214 / 396 ) »
Der BINARY SEARCH ist komplett in Ordnung. Den gab es schon in Release 3.1i (wo es noch gar keine internen Tabellentypen gab), so dass er dort alternativlos war, wenn man nicht sequenziell suchen wollte. Dementsprechend ausgereift ist er. Hat immer problemlos funktioniert. Aber klar, die Tabelle muss dafür halt sortiert sein.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Romaniac


Vergleichbare Themen

5
Antw.
23571
Views
Prüfen ob Eintrag in DB Tabelle schon vorhanden
von clinke » 10.10.2006 08:56 • Verfasst in ABAP® für Anfänger
1
Antw.
4543
Views
Select-Abfrage ob Eintrag vorhanden oder nicht
von Danny » 27.01.2005 08:04 • Verfasst in ABAP® Core
2
Antw.
2220
Views
sy-subrc oder syst-subrc?
von genua » 31.10.2007 11:55 • Verfasst in ABAP® für Anfänger
6
Antw.
603
Views
BINARY MODE zu PDF Datei konvertieren
von ABAPlerv » 16.12.2022 11:14 • Verfasst in ABAP® für Anfänger
1
Antw.
761
Views
Float Werte im Excel sind nicht identisch.
von Mykola » 22.11.2017 10:12 • Verfasst in ABAP® Core

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.