[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    Registriert seit
    Feb 2001
    Beiträge
    20.246
    Ja das ist der Fluch der Automatismen.
    Der Specific-Name dient zur Benennung des generierten Objektes und zu sonst nichts.
    Bei langen Namen generiert SQL ansonsten den Systemnamen selber.
    Im Gegensatz zu Feldern und Tabellen ist der Specific-Name nicht im SQL-Kontext verwendbar.
    D.h., dadurch dass du in SQL jedes vorhandene Programm per CALL aufrufen kannst, wird deine SQL-Prozedur mittels "CALL PROGRAM" aufgerufen.
    Dies ist das selbe, als wenn du das Programm per CALL aus RPG aufrufst.
    SQL spielt da nicht mit.
    Eine SQL-Prozedur muss mit ihrem originären Namen aufgerufen werden und zwar so wie sie in SYSPROCS unter ROUTINE_NAME eingetragen ist.
    Wird sie dort nämlich nicht gefunden, wird ein Programm-Call daraus.
    Nun führt dies nicht zu Fehlern, da die SQL-Prozeduren in "C" erstellt werden und daher automatisch mit 0-N Parametern aufgerufen werden (Ähnlich wie halt RPGLE).
    Erst beim Zugriff auf die fehlenden Variablen würde ein MCH ausgelöst.

    Wenn du eine externe Prozedur im SQL-Stil erstellst, erhältst du zusätzliche Übergabeparameter für z.B. eine SQLCODE-Rückgabe. Greifst du nicht darauf zu gibt's auch keinen Laufzeitfehler.
    Machst du die Prozedur im Stil "General" sind nur die Funktionsparameter deklariert und dann merkst du keinen Unterschied zwischen SQL-Prozedur-Aufruf und SQL-Programm-Aufruf.
    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

  2. #14
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich habe es bei mir jetzt auch nochmal getestet und funktioniert so wie erwartet. (7.1)
    Einmal mit "declare exit handler for sqlexception" und einmal ohne.
    In beiden Fällen bekomme ich den SQL Fehler:
    • In der standard SQLSTATE variable vom RPG
    • Oder mit der Get Diagnostics Funktion


    Code:
    CREATE or REPLACE PROCEDURE PRANLIB.MYPROC2 ( 
    	IN PNAME VARCHAR(10) ) 
    	LANGUAGE SQL 
    	SPECIFIC PRANLIB.MYPROC2 
    	NOT DETERMINISTIC 
    	MODIFIES SQL DATA  
    	SET OPTION  COMMIT = *CHG 
    	
    	BEGIN 
    DECLARE SQLCODE INT ; 
    DECLARE SQLSTATE CHAR ( 5 ) ; 
    
    insert into pranlib.tab1 values (1, PNAME);
    
    END;
    Code:
    Exec Sql Call PRANLIB.MYPROC2('asdf');
    dsply sqlstate;
    Exec Sql Get Diagnostics CONDITION 1 :vsqlmsg = MESSAGE_TEXT;
    dsply (%subst(vsqlmsg : 1: 20 ) );
    Bei den langen SQL und kurzen SYS Namen muss man etwas aufpassen.
    Da kann es passieren, dass z.B. beim CREATE OR REPLACE die alte Prozedur nicht gelöscht sondern einfach eine Neue angelegt wird.
    Produktiv verwenden wir gar nicht die REPLACE Syntax sondern Löschen alle Prozeduren mit:
    DROP SPECIFIC ROUTINE ...
    und
    DROP ROUTINE ...
    ... um ganz sicher zu gehen dass da nicht was vergessen wurde.

    lg Andreas

  3. #15
    Registriert seit
    Sep 2004
    Beiträge
    129
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ja das ist der Fluch der Automatismen.
    Der Specific-Name dient zur Benennung des generierten Objektes und zu sonst nichts.
    Danke für die Erklärung, jetzt wirds mir klar.
    Weiß nicht warum ich das gemacht hab, beim Überladen mach ich das ja auch nicht.
    Ich halte ja nichts von so langen Namen, aber die werden für die PC-Welt erstellt, vielleicht hat sich da etwas in mir gesträubt.
    Naja, eine Woche an der falschen Stelle gesucht, aber viel dabei gelernt.
    Wer andren eine Bratwurst brät, hat ein Bratwurstbratgerät!

Similar Threads

  1. Procedure Parameterfehler - Fehlendes PTF?
    By S.Neinawaie in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 14-08-14, 08:39
  2. Problem SQL Procedure
    By CaddyMajor in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 25-06-14, 08:22
  3. Stored Procedure endlos
    By lorenzen in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 12-12-02, 16:46
  4. Java stored procedure
    By Sven Schneider in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-09-02, 07:31
  5. Stored Procedure
    By lorenzen in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 27-08-02, 14:59

Berechtigungen

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