[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    727

    Store Procedure Fehler SQL0579

    Hallo,
    folgendes Problem.

    Ein OPM-RPG-Programm ist als Store Procedure registriert.
    Dieses ruft per dynamischem CALL ein SQLRPG-PGM auf.
    Das SQLRPG-PGM verwendet folgende Anweisungen :

    Code:
    C*      SQL-Cursor
    C/EXEC SQL                      
    C+ DECLARE BstCursor CURSOR FOR 
    C+ DynSqlStmt                   
    C/END-EXEC       
    ...
    C*      Verarbeitung vorbereiten
    /EXEC SQL           
    C+ PREPARE DynSqlStmt
    C+ FROM  :SQLSTM     
    C/END-EXEC
    ...                          
    C/EXEC SQL                    
    C+ OPEN BstCursor             
    C/END-EXEC                    
    ...                         
    C*      Druckerwarteschlange  
    C/EXEC SQL                    
    C+ FETCH BstCursor INTO :OUTQ 
    C/END-EXEC                    
    ...                            
    C*      Verarbeitung beenden  
    C/EXEC SQL                    
    C+ CLOSE BstCursor            
    C/END-EXEC
    Das Feld SQLSTM enthält ein einfache SQL-SELECT Anweisung.

    Beim Öffenen des Cursors tritt folgender Fehler auf :

    Code:
    Nachrichten-ID . . . . :   SQL0579       Bewertung  . . . . . . :   30         
     Nachrichtenart . . . . :   Diagnose                                            
     Sendedatum . . . . . . :   17.11.05      Sendezeit  . . . . . . :   15:49:21   
                                                                                    
     Nachricht . . . :   Lesen von SQL-Daten nicht zulässig.                        
     Ursache  . . . . :  Einer der folgenden Fehler ist aufgetreten:                
         -- Es wurde eine Prozedur oder Funktion aufgerufen, die mit CONTAINS SQL   
       DATA als Datenzugriffsattribut erstellt wurde. Eine Prozedur oder Funktion,  
       die mit CONTAINS SQL DATA erstellt wurde, oder eine Prozedur oder Funktion,  
       die von der Prozedur oder Funktion aufgerufen wird, darf keine Daten lesen   
       und keine Prozedur oder Funktion aufrufen, die das Attribut READS SQL DATA   
       hat.                                                                         
         -- CONTAINS SQL DATA darf in den Anweisungen CREATE PROCEDURE oder CREATE  
       FUNCTION für eine SQL-Prozedur oder -Funktion nicht angegeben werden, wenn   
       der Routinenteil Anweisungen enthält, die Daten ändern.                      
         -- Ein Auslöser, der SQL-Anweisungen enthält, wurde aktiviert.             
                                                                       Weitere ...
    Wo liegt das Problem, bzw. was ist mein Fehler ?

    Danke Sven!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.296
    Erstelle die SQL-Prozedur einfach ohne CONTAINS SQL DATA.
    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

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    727
    Zitat Zitat von Fuerchau
    Erstelle die SQL-Prozedur einfach ohne CONTAINS SQL DATA.
    Das ist ja gerade das Problem :
    Die Procedure ist folgendermassen definiert :

    Code:
    CREATE PROCEDURE OSDBBANFPR.BST100C ( 
    
    	INOUT PARAM CHAR(385) , 
    
    	INOUT RC CHAR(1) , 
    
    	INOUT MSGID CHAR(7) , 
    
    	INOUT MSG CHAR(80) , 
    
    	INOUT FLD CHAR(32) ) 
    
    	LANGUAGE CL 
    
    	SPECIFIC OSDBBANFPR.BST100C 
    
    	NOT DETERMINISTIC 
    
    	NO SQL 
    
    	CALLED ON NULL INPUT 
    
    	EXTERNAL NAME 'OSDBBANFPR/BST100C' 
    
    	PARAMETER STYLE GENERAL ;
    Beim BST100C handelt es sich um ein CL-Programm.
    Hier werden folgende Programme per dynamischem Call aufgerufen :

    BST100C (CLP) --> CALL BST100 (RPG) --> BST100S (SQLRPG)

    Das SQL-PGM BST100S enthält hierbei die embedded SQL-Anweisung.

    Sven

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.296
    Wenn du NO SQL angibst, darf auch kein SQL verwendet werden, auch nicht in aufgerufenen Programmen (Thread-Sicherheit).
    Eliminiere die Zeile !
    Mit dem DETERMINISTIC stehe ich auch etwas auf Kriegsfuss.
    Ggf. ist hier NOT nicht erlaubt, da ja unterschiedliche Ergebnisse bei identischen Parametern zurückkommen könnten (betrifft normalerweise nur Funktionen).
    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
    Jun 2001
    Beiträge
    727
    Vielen Dank,
    das hat funktioniert bzw. korrekt wäre eigentlich der default Wert READS SQL DATA und das funktioniert auch.
    (Wird wohl doch Zeit für eine Brille, NO SQL steht ja gross da )

    Die Beschreibung zur Fehlermeldung SQL0579 ist dann aber nicht ganz korrekt. (richtig wäre ... NO SQL/CONTAINS SQL ...). Und CONTAINS SQL DATA gibt es schon gar nicht.

    NOT DETERMINISTIC ist hier unkritisch, da die SP immer mit anderen Input-Parameterwerten aufgerufen wird.
    (Deterministische SP kann DB2 optimieren, d.h. sie liefern mit den selben Input-Parametern immer die selben Output-Parameterwerte zurück.)

    Sven

Similar Threads

  1. Berechtigung für Stored Procedure
    By rebe in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 12-10-06, 11:22
  2. Fehler im SQL bzw. Joblog
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 10-07-06, 11:58
  3. SQL Stored Procedure verschwindet
    By florian in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 17-05-06, 16:08
  4. ODBC Verbindungs Fehler (-7778)
    By Hubert in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 10-05-06, 09:41
  5. Fehler bei Stored Procedure
    By peter.kinne in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 21-09-05, 11:22

Berechtigungen

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