-
embedded SQL, Satz geschützt
[/PHP]
In einem RPG-Programm mit embedded SQL verwende ich
eine Datei, die abwechselnd mit 2 SQL-Cursor
verarbeitet wird.
Mit dem 1. Cursor lese ich bestimmte Sätze aus der
Datei mit declare Cursor1
open Cursor1
fetch Cursor1
....
close Cursor1
Mit dem 2. Cursor lese ich Sätze und lösche einige davon
declare Cursor2
open Cursor2
fetch Cursor2
delete from myDatei where current of
Cursor2
Die beiden Cursor nicht nicht gleichzeitig geöffent.
Beim Löschen kommt der SQL-Code -906 mit dem Text:
Cursor Cursor2 für Datei myDatei schreibgeschützt.
Was muss ich beachten, damit es klappt ?
[PHP]
mfg Ludger
-
Hallo,
Nur so eine Idee:
wenn Du im Declare-Statement des ersten Cursors am Ende FOR READ ONLY (oder FOR FETCH ONLY) hinzufügst, stellst Du sicher, dass dieser Cursor nur als INPUT ONLY verarbeitet wird. werden
PHP-Code:
C/EXEC SQL
C+ DECLARE Cursor ....
C+ SELECT ....
C+ FOR READ ONLY
Der zweite Cursor sollte als SCROLL CURSOR definiert sein.
Wenn das nicht helfen sollte, müsste man das SELECT-Statement des zweiten Cursors sehen. Vielleicht ist der zweite Cursor aus irgendeinem Grund nicht "deletable".
Birgitta
-
Hallo Brigitta,
nachdem der Stromausfall beseitigt war und der Schnee weggeräumt ist, hatte ich Gelegenheit, Deine Anregung zu testen. Leider hat es nicht geklappt.
Nachstehend nun das Declare des 2. Cursors, bei dem der DELETE nicht klappt.
PHP-Code:
*============================================
C de_bolvsn_02 begsr
c/exec sql
c+ declare C_bolvsn_02 cursor for
c+ select *
c+ from bolvsnpf
c+ where bvlfsnr = :cpkomm
c+ and bvauftr = :cpauft
c+ and bvposit = :cpapos
c+ order by bvlfsnr, bvauftr, bvposit, bvstcknr
c/end-exec
C endsr
Vielleicht kannst Du daraus was erkennen ?!
Wenn nicht, dann werde ich das SQL aus dem programm rausnehmen und wieder mit der Native-RPG-Methode arbeiten.
mfg. Ludger
-
Hallo Ludger,
Cursor, die eine ORDER BY-Anweisung enthalten, sind weder "deleteable" noch "updateable".
Für den Update kann man sich durch das Hinzufügen von FOR UPDATE OF Feld1, ... Feldn behelfen. Für Delete funktioniert dies nicht.
Wenn der ORDER BY nicht unbedingt erforderlich ist, dann lass ihn weg. In diesem Fall kann der Satz über DELETE ... WHERE CURRENT OF gelöscht werden.
Sollte der ORDER BY erforderlich sein, muss der Satz über ein separates SQL-Update-Statement (ohne Bezug auf den Cursor) gelöscht werden. Vorsicht: wenn über relative Satz-Nr. gelöscht werden sollte, wird immer ein Table Scan ausgeführt.
Der Update kann allerdings auch über native I/O ausgeführt weden.
Birgitta
-
Vielen Dank für die Untestützung und noch ein schönes
Restwochenende.
mfg Ludger
-
Hallo,
das halte ich für ein Gerücht, mit for update Klausel und dynamic scroll geht alles (außer Schmuddel wie Key update); order by ist da kein Hinderungsgrund und positioned delete/update aus Performance Gründen immer vorzuziehen.
mfg
Dieter Bender
Zitat von B.Hauser
Hallo Ludger,
Cursor, die eine ORDER BY-Anweisung enthalten, sind weder "deleteable" noch "updateable".
Für den Update kann man sich durch das Hinzufügen von FOR UPDATE OF Feld1, ... Feldn behelfen. Für Delete funktioniert dies nicht.
Wenn der ORDER BY nicht unbedingt erforderlich ist, dann lass ihn weg. In diesem Fall kann der Satz über DELETE ... WHERE CURRENT OF gelöscht werden.
Sollte der ORDER BY erforderlich sein, muss der Satz über ein separates SQL-Update-Statement (ohne Bezug auf den Cursor) gelöscht werden. Vorsicht: wenn über relative Satz-Nr. gelöscht werden sollte, wird immer ein Table Scan ausgeführt.
Der Update kann allerdings auch über native I/O ausgeführt weden.
Birgitta
-
Hallo Dieter, nachdem ich das where current of rausgenommen hatte und ausserdem
noch eine Dateierweiterung vorgenomme hatte, um den Satz eindeutig bestimmen
zu können, hat es mit dem Löschen funktioniert.
Was nutzen die schönsten Performance-Zeiten, wenn es nicht geht ?
mfg. Ludger
-
Zitat von BenderD
Hallo,
das halte ich für ein Gerücht!
Hallo Dieter,
Hast Du's ausprobiert?
Ich schon!
Wenn ORDER BY angegeben ist, erhält man nach dem DELETE den SQL-Code -510, unabhängig davon ob DYNAMIC SCROLL CURSOR, SCROLL CURSOR oder nur CURSOR angegeben ist.
Steht übrigens auch so in der SQL-Reference, vielleicht nicht ganz so einfach (doppelt verneint und so!)
Birgitta
-
Laut Handbuch muss der Cursor als "for update" deklariert werden. Dann spielt Order By bzw. der Cursor-Typ keine Rolle.
Allerdings sind Join's in solchen Fällen nicht möglich.
-
Hallo,
nicht nur probiert, das ist tägliche Praxis.
Wenn der update geht, dann geht auch der Delete und die ominöse -510 beschreibt, was zu tun ist. Wenn order By, dann ist for update of Klausel erforderlich und die Angabe eines Feldes genügt (kein ORDER BY Feld, kein primary Key). Wenn scroll, dann dynamic und die üblichen Bedingungen für updatable Cursor müssen ebenfalls stimmen.
mfg
Dieter Bender
Zitat von B.Hauser
Hallo Dieter,
Hast Du's ausprobiert?
Ich schon!
Wenn ORDER BY angegeben ist, erhält man nach dem DELETE den SQL-Code -510, unabhängig davon ob DYNAMIC SCROLL CURSOR, SCROLL CURSOR oder nur CURSOR angegeben ist.
Steht übrigens auch so in der SQL-Reference, vielleicht nicht ganz so einfach (doppelt verneint und so!)
Birgitta
Similar Threads
-
By Squall in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 18-10-06, 12:01
-
By muadeep in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 03-08-06, 13:25
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 18-06-06, 12:14
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By e_sichert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 03-05-06, 10:47
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks