[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.809
    Hierzu muss gesagt werden, dass beim dynamischen SQL jedesmal die Syntax überprüft, die Zugriffswege analysiert und optimiert werden müssen.
    Besser ist es immer, mit statischen SQL's und Parametern zu arbeiten wenn die Anzahl der Felder immer konstant sind.

    Also mit
    c/exec sql
    c+ update NC6000 set BWOT =:BOWT where FIR =:FIR and FIL =:FIL and DKNR =:DKNR
    c/end-exec

    Dieses Statement wird prepared (vorbereitet) und ist direkt ausführbar.

    Deinen Insert würde ich in 2 Teile aufteilen.
    Die Vergabe von PSLFNR sollte über Trigger gelöst werden, so dass kein Select erforderlich ist:

    CREATE TRIGGER NC6130_BEFORE_INSERT
    BEFORE INSERT ON NC6130
    REFERENCING NEW ROW AS NR
    FOR EACH ROW MODE DB2ROW
    SET OPTION SQLPATH = *LIBL
    BEGIN
    SET NR.PSLFNR = (SELECT VALUE(MAX(PSLFNR), 0) + 1
    FROM NC6130);
    END

    Dann kannst du deinen Insert mit
    /exec sql
    +insert into NC6130 (FIR,FIL,DKNR,KORR,WPNR,PSZE,PSLFNR)
    +values (:FIR, :FIL, :DKNR, :KORR, :WPNR, :PSZE, 0)
    /end-exec

    durchführen.
    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. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.945
    Hi,

    es ist meistens besser und einfacher statisches SQL zu verwenden, da die Syntaxprüfung zur Compile Zeit erfolgt und je nachdem, wie die OPTION CLSSQLCSR im Compile Befehl oder in einer SET OPTION Anweisung angegeben wurde, wird der ODP (open data path) wieder verwendet.

    Es gibt noch viele andere Aspekte, die die Performance beeinflussen können. Darüber gibt es auch diverse REDBOOKS.

    Leider gibt hat man nicht immer die Möglichkeit statisches SQL zu verwenden.

    Wenn der EXECUTE IMMEDIATE Befehl ausgeführt wird, wird zunächst der alphanumerische Befehl in ein ausfürhrbares SQL statement konvertiert, anschliessend wird der optimale Zugriffsweg ermittelt und dann das Statement ausgeführt.
    Der EXECUTE IMMEDIATE Befehl ist die Kombination der Befehle PREPARE und EXECUTE.

    Nutzt man diese beiden Befehle, braucht das SQL statement nur einmal konvertiert zu werden. Die Ausführung kann beliebig oft erfolgen, d.h. der Optimizer braucht nicht bei jedem Aufruf den Zugriffs-Pfad zu ermitteln.

    Man kann im SQL-String Parameter Marker (?) für Variablen setzen, die bei der Ausführung dann durch Host Variablen Werte ersetzt werden können. Diese Werte werden im EXECUTE statement über USING :Var1, :Var2 angegeben.

    Die ist jedoch nur möglich für Felder. Muss die Datei variabel gesetzt werden, muss das PREPARE statement immer ausgeführt werden.

    Birgitta.
    Birgitta Hauser

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

Similar Threads

  1. SQL Sensitiver Cursor Probleme
    By Rincewind in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-12-06, 14:58
  2. Embedded SQL in VARPG
    By Squall in forum NEWSboard Programmierung
    Antworten: 23
    Letzter Beitrag: 18-10-06, 13:01
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 10:43
  4. Character verbinden in Embedded SQL
    By e_sichert in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 03-05-06, 11:47
  5. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 19:38

Berechtigungen

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