ABAP Laufzeitfehler — Part 1
1. Divisionsfehler ( CX_SY_ZERO_DIVIDE )
Dieser Fehler tritt auf, wenn versucht wird, durch Null zu teilen.
data: lv_result type i,
lv_num1 type i value 10,
lv_num2 type i value 0.
data: lv_msg type ref to cx_root.
try.
lv_result = lv_num1 / lv_num2.
catch cx_sy_zerodivide into lv_msg.
message lv_msg->get_text( ) type 'I'.
endtry.2. Konvertierungsfehler ( CX_SY_CONVERSION_NO_NUMBER )
Dieser Fehler tritt auf, wenn versucht wird, einen Wert in einen inkompatiblen Datentyp zu konvertieren.
data: lv_result type i,
lv_num type i value 10,
lv_text type char4 value 'Text'.
data: gv_msg type ref to cx_root.
try.
lv_result = lv_text div lv_num.
catch cx_sy_conversion_no_number into gv_msg.
message gv_msg->get_text( ) type 'I'.
endtry.3. Überlauffehler ( CX_SY_ARITHMETIC_OVERFLOW )
Dieser Fehler tritt auf, wenn das Ergebnis einer arithmetischen Operation den zulässigen Bereich des verwendeten Datentyps überschreitet. Dies kann bei Addition, Subtraktion, Multiplikation oder Division passieren, wenn die resultierende Zahl zu groß oder zu klein ist, um in den Datentyp zu passen.
data: lv_result type i,
lv_num1 TYPE i VALUE 68354175,
lv_num2 TYPE i VALUE 99.
data: gv_msg type ref to cx_root.
try.
lv_result = lv_num1 * lv_num2.
catch cx_sy_arithmetic_overflow into gv_msg.
message gv_msg->get_text( ) type 'I'.
endtry.4. Konvertierungsfehler ( CX_SY_CONVERSION_OVERFLOW )
Dieser Fehler tritt auf, wenn der Wert einer Variable oder eines Ausdrucks nicht in den Datentyp konvertiert werden kann, der für die Zuweisung oder andere Operation vorgesehen ist. Dies kann passieren, wenn der Wert zu groß, zu klein oder in einem anderen Format vorliegt, als der Datentyp es zulässt.
data: lv_result type i,
lv_num1 TYPE f VALUE 2147483647,
lv_num2 TYPE i VALUE 99.
data: gv_msg type ref to cx_root.
try.
lv_result = lv_num1 * lv_num2.
catch cx_sy_conversion_overflow into gv_msg.
message gv_msg->get_text( ) type 'I'.
endtry.4. Entitätsfehler ( CX_SY_ITAB_LINE_NOT_FOUND )
Dieser Fehler tritt auf, wenn versucht wird, auf eine Zeile in einer internen Tabelle zuzugreifen, die nicht existiert. Dies kann passieren, wenn die Zeile gelöscht wurde, die Zeilennummer falsch ist oder die interne Tabelle leer ist.
data: lt_numbers type table of i,
lv_index type i,
lv_value type i.
data: gv_msg type ref to cx_root.
lt_numbers = value #( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ).
lv_value = 5.
try.
data(lv_value_new) = lt_numbers[ lv_value ].
catch cx_sy_itab_line_not_found into gv_msg.
message gv_msg->get_text( ) type 'I'.
endtry.5. Erzeugensfehler ( CX_SY_CREATE_OBJECT_ERROR )
Get urcm’s stories in your inbox
Join Medium for free to get updates from this writer.
Dieser Fehler tritt auf, wenn die Erstellung eines neuen Objekts fehlschlägt. Dies kann verschiedene Gründe haben, z. B. wenn die Klasse nicht gefunden werden kann, die benötigten Parameter falsch sind oder nicht genügend Speicherplatz vorhanden ist.
class zcl_animal definition.
public section.
methods: constructor importing iv_type type string
raising cx_sy_create_object_error.
methods: produce_animal returning value(rv_voice) type string.
private section.
data: lv_type type string.
endclass.
class zcl_animal implementation.
method constructor.
if iv_type ne 'dog'.
raise exception type cx_sy_create_object_error.
else.
lv_type = iv_type.
endif.
endmethod.
method produce_animal.
case lv_type.
when 'dog'.
rv_voice = 'Haaw'.
endcase.
endmethod.
endclass.
start-of-selection.
data: lo_object type ref to zcl_animal.
try.
create object lo_object
exporting
iv_type = 'cat'.
catch cx_sy_create_object_error into data(create_error).
write: 'Ein Fehler ist beim Erstellen des Objekts aufgetreten: ', create_error->get_text( ).
endtry.6. Laufzeitfehler ( CX_SY_SQL_ERROR )
Dieser Fehler tritt auf, wenn bei der Ausführung einer SQL-Anweisung ein Fehler auftritt. Dies kann verschiedene Gründe haben, z. B. falsche Syntax, ungültige Tabellenzugriffe, Datentypkonflikte oder andere Probleme mit der Datenbankverbindung.
data: lv_data type string.
data: lv_table type dd02l-tabname value 'SCAR'.
try.
select single carrid
into lv_data
from (lv_table)
where carrid = 'XYZ'.
write: / 'Daten erfolgreich abgerufen:', lv_data.
catch cx_sy_sql_error into data(lx_sql_error).
write: / 'Es ist ein SQL-Fehler aufgetreten:', lx_sql_error->get_text( ).
endtry.7. Zugriffsfehler ( CX_SY_FILE_ACCESS_ERROR )
Dieser Fehler tritt auf, wenn beim Zugriff auf eine Datei ein Problem auftritt. Dies kann verschiedene Gründe haben, z. B. fehlende Berechtigungen, eine nicht gefundene Datei, Schreibschutz oder andere Systemprobleme.
data: file_path type string value '/tmp/test_file.csv',
file_content type string.
try.
open dataset file_path for input in text mode encoding default ignoring conversion errors..
if sy-subrc = 0.
close dataset file_path.
write: / |File exists.|.
else.
write: / |File doesn't exist.|.
endif.
if sy-subrc = 0.
do.
read dataset file_path into file_content.
if sy-subrc <> 0.
exit.
endif.
write: / file_content.
enddo.
endif.
catch cx_sy_file_access_error into data(file_access_error).
data(error_message) = |Fehler beim Zugriff auf die Datei: { file_access_error->get_text( ) }|.
write: / error_message.
endtry.8. Aufrufsfehler ( CX_SY_ARG_OUT_OF_DOMAIN )
Dieser Fehler tritt auf, wenn ein Argument einer Funktionsaufrufs oder Methode außerhalb des zulässigen Wertebereichs liegt. Dies kann verschiedene Gründe haben, z. B. wenn ein numerischer Wert zu groß oder zu klein ist, ein Text zu lang ist oder ein ungültiges Zeichen verwendet wird.
data: lv_result type i,
lv_num type i value -1.
data: gv_msg type ref to cx_root.
try.
lv_result = sqrt( lv_num ).
cl_demo_output=>write_data( lv_result ).
cl_demo_output=>display( ).
catch cx_sy_arg_out_of_domain into gv_msg.
message gv_msg->get_text( ) type 'I'.
endtry.9. Laufzeitfehler ( CX_SY_NO_HANDLER )
Dieser Fehler tritt auf, wenn während der Programmausführung eine Ausnahme ausgegeben wird, für die keine Behandlungsroutine (Catch-Block) definiert ist.
Dies bedeutet, dass das Programm nicht weiß, wie es mit der aufgetretenen Ausnahme umgehen soll, und daher den Fehler an das übergeordnete Programm oder an das Betriebssystem weiterleitet.
data: lt_line type tline_t.
data(lv_matnr) = |{ '11' width = 18 alpha = in }|.
try.
call function 'READ_TEXT'
exporting
client = sy-mandt
id = 'BEST'
language = sy-langu
name = conv thead-tdname( lv_matnr )
object = 'MATERIAL'
tables
lines = lt_line
exceptions
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
others = 8.
cl_demo_output=>display( lt_line ).
catch cx_sy_no_handler into data(no_handler_error).
write: / 'Error:', no_handler_error->get_text( ).
endtry.10. Inkompatibilitätsfehler ( CX_SY_DYN_CALL_ILLEGAL_TYPE )
Dieser Fehler tritt auf, wenn ein dynamischer Funktionsaufruf mit inkompatiblen Datentypen durchgeführt wird. Dies kann verschiedene Gründe haben, z. B. wenn die übergebenen Parameter den falschen Typ haben, die Funktionssignatur nicht mit den Datentypen übereinstimmt oder es Probleme mit der Konvertierung von Datentypen gibt.
data: lv_wotnr type p.
try.
call function 'DAY_IN_WEEK'
exporting
datum = 01011924
importing
wotnr = lv_wotnr.
case lv_wotnr.
when '1'.
write :/ 'Montag'.
when '2'.
write :/ 'Dienstag'.
when '3'.
write :/ 'Mittwoch'.
when '4'.
write :/ 'Donnerstag'.
when '5'.
write :/ 'Freitag'.
when '6'.
write :/ 'Samstag'.
when '7'.
write :/ 'Sonntag'.
endcase.
catch cx_sy_dyn_call_illegal_type into data(no_handler_errors).
write: / 'Error:', no_handler_errors->get_text( ).
endtry.







