EXEC SQL mit IN Parameter???

Alle Fragen rund um Basisthemen
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

EXEC SQL mit IN Parameter???

Beitrag von Spaulding (ForumUser / 21 / 0 / 0 ) »
Hallo Leute,

ich habe ein Problem mit EXEC SQL. Anscheinend wird der IN-Paramter in der WHERE-Klausel nicht richtig ausgewertet... :(

Code: Alles auswählen.

data: lang type string.

lang = '(''O'', ''P'')'.

try.
    EXEC SQL PERFORMING evaluate.
      SELECT progname, language from repotext where LANGUAGE in :lang
  INTO :wa_repo

    ENDEXEC.
  catch cx_sy_native_sql_error into exc_ref.
    error_text = exc_ref->get_text( ).
    message error_text TYPE 'I'.
endtry.

Der Trace sieht eigentlich okay aus:

SQL-Anweisung

SELECT
progname, language
FROM
repotext
WHERE
LANGUAGE in :A0

Variable

A0(VC,10) = ('O', 'P')

Wird das SELECT auf der Datenbank ausgeführt, werden auch entsprechende Werte zurück geliefert.

Hat vielleicht jemand einen Tipp wie das nun auch aus dem ABAP heraus funktioniert?

Vielen Dank,
Spaulding

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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Mal ne andere Frage: Wieso benutzt du nicht einen normalen Open-SQL anstats diesen Native-SQL?

Beitrag von Spaulding (ForumUser / 21 / 0 / 0 ) »
Würde ich ja, aber die Tabelle ist nicht im DDIC enthalten...

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Spaulding hat geschrieben:Würde ich ja, aber die Tabelle ist nicht im DDIC enthalten...
Echt?

Ist dann die Tabelle in deinem Psot (repotext) nur ein Beispiel?
Bei mir exsistiert die nämlich im DDIC (Gott sei dank)!

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Hi Spaulding,

hast du schon mal probiert LANGUAGE in der Where-Klausel klein zu schreiben. Soweit ich weiß ist da Native SQL recht eigensinnig und unterscheidet zwischen Groß und Kleinschreibung.

Mich wunderts auch das dein into Statement am Ende steht. Keine Ahnung ob das Statement so richtig abgesetzt wird.
Versuchs doch auch mal so:

Code: Alles auswählen.

 EXEC SQL PERFORMING evaluate. 
      SELECT progname, language 
     INTO :wa_repo 
     from repotext 
    where language  in :lang 
  
    ENDEXEC. 
Gruß Steffi

stored Procedure mit Paramter vom Typ Tabelle

Beitrag von tian98 (ForumUser / 19 / 0 / 0 ) »
Hallo zusammen,

ist es möglich, im Aufruf einer Stored Procedure eine Tabelle zu übergeben?

* Verbindung aufbauen
EXEC SQL.
CONNECT TO 'NMCE'
ENDEXEC.
WRITE: / 'connect', sy-subrc.

* Verbindung setzen
IF sy-subrc = 0.
EXEC SQL.
set connection 'NMCE'
ENDEXEC.


*******************************************************************************************
* Aufruf Procedure
*******************************************************************************************
PARAMETERS: kunnr TYPE char10 DEFAULT '0010707172'.

TYPES: BEGIN OF itab,
data(130),
* data type string,
END OF itab.
DATA: it TYPE TABLE OF itab.
DATA: wa TYPE itab.
DATA: rc TYPE string.
DATA: error TYPE REF TO cx_sy_native_sql_error.

TRY.

EXEC SQL.
execute procedure nmc.PCK_SOFTSWITCH.get_AnschlussInfo ( IN :kunnr, OUT :it )
ENDEXEC.

CATCH cx_sy_native_sql_error INTO error.

WRITE: / 'ERROR:', error->kernel_errid.

ENDTRY.

TRY.

EXEC SQL.
execute procedure nmc.PCK_SOFTSWITCH.get_AnschlussInfo ( IN :kunnr, OUT :wa )
ENDEXEC.

CATCH cx_sy_native_sql_error INTO error.

WRITE: / 'ERROR:', error->kernel_errid.

ENDTRY.

LOOP AT it INTO wa.
WRITE: / wa-data.
ENDLOOP.

Hier kommt immer die Meldung DBIF_DSQL2_INVALID_REQUEST...

Kennt einer die Lösung?

Gruß Christian

Beitrag von Steffi221185 (Specialist / 132 / 0 / 0 ) »
Hallo tian98,

was hast du genau vor? Du möchtest doch deine Tabelle zurückbekommen oder?
Dann erstelle doch auf der DB wo du die Procedure ausführst eine Tabelle und liest diese wieder mittels Native SQL nach ausführen der Procedure aus. Im nachhinein kannst du diese ja wieder löschen.

Soweit ich weiß kannst du keine Tabelle an eine Procedure übergeben.
Ich verwende aber auch nicht den Abap-Befehl sondern den einfachen DB-abhängigen Befehl um eine Procedure auszuführen.

Gruß Steffi

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo tian98,

dazu müsstest Du den Zusatz PERFORMING verwenden, da NativeSQL immer nur eine Zeile pro Lauf zurückliefern kann. In der Unterroutine musst Du dann die Daten in Empfang nehmen und selbstständig in einer itab speichern.

Ob das allerdings so mit Deiner StoredProcedure funktioniert, weis ich nicht... QED
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1496
Views
Exec SQL
von fawkes » 13.07.2007 14:21 • Verfasst in ABAP® Core
7
Antw.
2440
Views
EXEC SQL
von JohnLocklay » 21.02.2019 13:51 • Verfasst in ABAP® Core
7
Antw.
2714
Views
EXEC SQL - '/' in Tablename
von TakePotLuck » 10.01.2012 11:45 • Verfasst in ABAP® für Anfänger
2
Antw.
677
Views
EXEC SQL / Sonderzeichen
von littleJohn » 19.10.2022 11:42 • Verfasst in ABAP® Core
2
Antw.
1685
Views
Exec SQL : insert [null]
von verzweifelt » 25.03.2016 15:35 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Regex in where
vor 27 Minuten von edwin 7 / 159
Daten an Tabelle binden
vor 13 Stunden von Bright4.5 3 / 1485

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

Regex in where
vor 27 Minuten von edwin 7 / 159
Daten an Tabelle binden
vor 13 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821