[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2009
    Beiträge
    128

    Aufruf einer SQL Prozedur mit OUT-Parameter erzeugt Parameter-Fehler

    Moin,

    ich möchte eine einfache SQL-Prozedur mit zwei IN- und einem OUT- Parameter aufrufen. Dabei erhalte ich immer den Fehler "number of Parameter values set or registered does not match number of parameters". Es erscheint mir als wenn der Parameter-Marker (?) im Aufruf nicht erkannt wird. Was kann die Ursache sein?

    Erstellen der Prozedur:

    CREATE or replace PROCEDURE Bibliothek.test (
    IN inANR numeric(6, 0),
    IN inANR numeric(6, 0),
    OUT outM numeric(10,3)
    )
    LANGUAGE SQL
    SPECIFIC Bibliothek.test
    ...

    Aufruf im ACS Run-SQL-Script-Tool:

    call Bibliothek.test(000100, 500, ?);

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Versuch mal vor dem Komma (Trennzeichen) ein Blank einzufügen.
    Außerdem solltest Du bei gepackten und gezonten Werten tatsächlich ein Dezimal-Trennzeichen angeben. Numerische Werte ohne Dezimal-Trennzeichen werden als Integer definiert, was für SQL ein anderer Datentyp ist.

    Also so:
    Code:
    CALL Bibliothek.test(000100,0 , 500,0 , ? );
    ACS stellt sich da manchmal ein bisschen doof an!
    Wenn kein Blank vor dem Trennzeichen angegeben ist, wird das Komma als Trennzeichen interpretiert und der nächste Parameter als Nachkomma-Stellen ... und damit erkennt er nur 2 und keine 3 Parameter
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Nov 2020
    Beiträge
    315
    Ich meine beim ACS gibst du statt dem ? einfach einen Dummy-Wert an:

    call Bibliothek.test(000100, 500, 0);

    Unabhängig davon würde ich auch noch prüfen ob SQL nicht mehrere Prozedurend davon erstellt hat.
    Z.B.: test00001 usw.
    Der OR REPLACE bei den Prozeduren erstetzt nicht immer die Prozedur, gerade wenn sich die Parameter ändern, da SQL dann meint, dass es sich um eine ganz eigene Prozedur mit gleichen Namen aber unterschiedliche Parameter handelt.
    Im ACS über das Menü "Schemas" einfach kurz prüfen.

    lg Andreas

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Um eine Prozedur mit Ausgabeparameter zu testen, bedarf es einer Hilfsfunktion, die den Ausgabeparameter als Return liefert. Diese ist dann im Select verwendbar.

    Ein "?" gilt als Parameter, den man natürlich per ACS-SQL nicht übergeben kann.
    Ein typgerechter Ersatzwert hilft ja nur beim Debug.
    Typgerecht heißt: ein 10,3-Wert muss als 1234567,890 übergeben werden.
    Wobei dies allerdings zu einem decimal (also packed) und nicht numeric (zoned) führt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Bevor man irgendetwas behauptet sollte man es zuerst testen!
    ... oder aber einfach mal ausprobieren, was andere empfehlen!

    Name:  Screenshot 2023-01-08 141235.jpg
Views: 107
Size:  29,6 KB
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das zeigt mal wieder, dass eine kleine Provokation meinerseits dazu führt, dass mir das Gegenteil bewiesen wird. Und vor allem wie genau es gemacht wird.
    Somit hilft dies dann doch allen.
    Vielen Dank dafür.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jun 2009
    Beiträge
    128
    @Brgitta: Danke, das blank hat geholfen.
    @Andreas: Danke für den Hinweis auf ggf. mehrfach erstellte Prozeduren (was ja, wenn man verschiedene Versionen unterstützen möchte, auch sinnvoll sein kann). Hatte ich aber mit der Angabe von SPECIFIC schon vermieden.

Similar Threads

  1. SQL-Prozedur mit cpytoimpf-Aufruf hängt
    By JotSo in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 30-10-19, 17:51
  2. Aufruf SQL Prozedur von SQLRPGLE
    By Dschainers in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-08-19, 12:09
  3. Artikel: Die neuen Scale-Out Server-Modelle mit POWER9 Prozessoren
    By NEWSolutions Redaktion in forum NEWSolutions artikel
    Antworten: 0
    Letzter Beitrag: 01-06-18, 12:00
  4. order by case when :a = 12 then a35#07 else feldB end, erzeugt Fehler
    By sauerm in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 09-03-18, 09:49
  5. SQL-Prozedur Aufruf Fehler
    By chrisonline in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 10-12-07, 14:29

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •