[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2021
    Beiträge
    3

    Kann man SET OPTION für SQL Functions global definieren?

    Hi allerseits,

    wir verwenden in letzter Zeit immer stärker SQL Functions und müssen hierfür aufgrund unseres internen Security Konzepts einpaar Compiler-Optionen überschreiben:
    Code:
    SET OPTION
    	USRPRF = *OWNER,
    	DYNUSRPRF = *OWNER
    Jetzt finde ich persönlich es etwas mühsam, dass wir bei jeder SQL Function diese Parameter mittels Copy/Paste hinzufügen müssen, damit die Function auf unserer IBM i richtig erstellt wird. Bei den Kompilierbefehlen für RPG und CL Programme gibt es ja die Möglichkeit Command Defaults zu setzen. Gibt es eine ähnliche Möglichkeit auch für diese SQL Optionen?

    Danke und liebe Grüße,
    Andreas

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Dafür musst du einen eigenen Präprozessor verwenden.
    Dieter Bender hat da was auf seiner Homepage.
    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
    Jan 2007
    Beiträge
    905
    Versuchs mal so:
    chgcmddft cmd(CRTSQLRPGI) newdft('usrprf(*owner)')
    chgcmddft cmd(CRTSQLRPGI) newdft('dynusrprf(*owner)')
    kf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    SQL-Function werden allerdings z.B. mit RUNSQLSTM erstellt.
    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.873
    Man kann SQL-Code auch in einer Quellen-Datei (oder IFS-Datei) hinterlegen und dann via /INCLUDE als Copy-Strecke in den Source Code inkludieren.
    ... allerdings weiß ich nicht, ob das mit dem SET OPTION Statement funktioniert, da es sich hierbei ja um Compiler-Anweisungen handelt, die außerhalb des Routine Bodies angegeben werden.

    ... das ist aber wahrscheinlich nicht das was Du willst, nämlich vermeiden, dass die ganzen Quellen angefasst werden müssen.

    SQL-Funktionen werden intern in C-Code mit embedded SQL konvertiert und dann mit dem C-Compiler erstellt. Man könnte also versuchen mit der Methode von camouflage den C-Compile-Command zu modifizieren.
    Ich persönlich würde allerdings die Quellen bearbeiten.
    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
    Aug 2021
    Beiträge
    3
    Recht herzlichen Dank für die raschen Rückmeldungen. Ich konnte eure Ideen mittlerweile durchdenken bzw. auch evaluieren:


    Command Defaults überschreiben:
    - Für CRTSQLRPGI werden bei uns seit längerer Zeit die angeführten Überschreibungen bereits durchgeführt, weil wir das ohnehin für unsere SQLRPGLE Programme benötigen, aber das greift beim Aufruf von "CREATE OR REPLACE FUNCTION" nicht. Wie Fuerchau richtig angemerkt hat, führe ich bei der Deploymentautomatisierung den SQL Sourcecode mittels RUNSQLSTM aus. In der Entwicklung wird der SQL Sourcecode direkt über ein Entwicklungstool wie IBM i ACS oder DBeaver ausgeführt.


    - Durch die Erstellung einer SQL Function wird im Hintergrund auch ein Objekt erstellt. Dank diesem Link [1] habe ich herausgefunden, dass dieses Objekt mittels CRTSQLCI erstellt wurde. Deshalb hätte ich die Command Defaults für diesen CL Befehl angepasst, aber das bringt nichts. Meine Vermutung ist, dass durch "CREATE OR REPLACE FUNCTION" die Werte für USRPRF und DYNUSRPRF an CRTSQLCI im Hintergrund übergeben werden und die Command Defaults gar nicht zum Zug kommen.


    Präprozessor:
    Wir haben ein SQLRPGLE Programm entwickelt, das zuerst mittels "EXEC SQL" den SET OPTION Aufruf ausführt und danach erneut mittels "EXEC SQL" den Inhalt unserer .SQL Datei ausführt. Ich habe dann das dadurch erstellte Objekt wieder mittels PRTSQLINF geprüft und die Parameter USRPRF und DYNUSRPRF wurden dann wie gewünscht mit *OWNER angezeigt. Somit funktioniert dieser Ansatz für unser automatisiertes Deployment. Einziger Nachteil ist, dass der Präprozessor während der Entwicklung neuer Functions nicht direkt verwendet werden kann, weil meine Kolleginnen und Kollegen eben in einem SQL Entwicklungswerkzeug die Functions entwickeln und laufend den Sourcecode ausführen. In diesem Fall müssten wir also unseren Entwicklungsprozess entsprechend anpassen, dass bei der Entwicklung auch der SQL Code in das IFS übertragen und der Präprozessor aufgerufen wird.


    Ergebnis:
    Wir werden voraussichtlich den Weg gehen, dass wir die SET OPTION Statements in alle CREATE OR REPLACE FUNCTION Statements einfügen, wie Birgitta dies auch angemerkt hat.
    Zusätzlich werde ich noch einen RFE anlegen mit der Bitte, dass die Compiler-Optionen auch bei SQL DDL Statements an einer zentralen Stelle überschrieben werden können. In der QAQQINI gibt es ja einige Möglichkeiten zum Überschreiben/Konfigurieren von Parametern für die SQL Ausführung, aber eben leider nicht die Möglichkeiten, die Compiler Options zu überschreiben.

    Wenn ich den RFE angelegt habe werde ich die URL hier auch posten, falls wer dafür voten möchte

    Nochmals danke für euren Input!


    [1] https://www.nicklitten.com/rpgle-and...ner-conundrum/

  7. #7
    Registriert seit
    Aug 2021
    Beiträge
    3

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... ich wollte zwar keine Mitschuld an schlechtem Design erwerben, aber...
    RUNSQLSTMT...
    USRPRF(*OWNER)
    DYNUSRPRF(*OWNER)
    richtet das an.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SET OPTION
    By volkerK in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 06-02-19, 15:26
  2. SS15733 Option 30 V7R1
    By GAusthoff in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 23-01-17, 19:56
  3. Sfl-Satz löschen, declare global temporary table im SQL
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 08-01-15, 14:19
  4. AS/400 Service Functions
    By MKnoll in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 19-11-02, 15:21
  5. Option(*varsize)
    By Robi in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-08-01, 13:16

Tags for this Thread

Berechtigungen

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