View Full Version : SQL delete auf bestimmte Teildatei
Hallo,
ich habe eine DB2 Datenbank Datei mit mehreren "Membern"!
kann man in einem SQLRPGLE, mit einen sql "delete", eine bestimmte Teildatei löschen/clearn?
vielleicht auch mit einem vorherigen "OvrDbf", etc. ?????
andreaspr@aon.at
30-01-13, 14:10
Nach einem OVRDBF oder in SQL mit CREATE ALIAS kannst du mit SELECT, DELETE, UPDATE auf die Records einer bestimmten Teildatei zugreifen.
Um die Teildatei zu löschen würde ich den befehl RMVM verwenden.
lg Andreas
a.) die Datei wurde aber nicht mit SQL erstellt, sondern ist eine DB2 (PF)
b.) ich möchte nicht die komplette Datenbank, sondern nur den entsprechenden
Inhalt der Teildatei löschen
camouflage
30-01-13, 15:14
Geht auch mit:
CLRPFM FILE(myLib/myFile) MBR(myMbr)
andreaspr@aon.at
30-01-13, 15:24
a.) die Datei wurde aber nicht mit SQL erstellt, sondern ist eine DB2 (PF)
b.) ich möchte nicht die komplette Datenbank, sondern nur den entsprechenden
Inhalt der Teildatei löschen
@a) das ist egal
@b) Mit Datenbank meinst du wohl Teildatei.
Wenn du nur bestimmte Sätze löschen willst (also mit WHERE ...) kannst du das mit ein CREATE ALIAS machen.
Wenn du den gesamten Inhalt löschen willst, ist das CLRPFM am einfachsten.
bei einem CLRPFM habe ich aber das Problem, das es sein kann, das zum Zeitpunkt des löschens der entspr. "Teildatei" (=member), diese von einem User noch gesperrt sein kann !!!
=> hier es es mir dann nicht möglich diese Teildatei zu löschen!
bei einem "SQL-delete" habe ich das Problem nicht!
=> hier kann ich auch den gesamten Inhalt der entspr. Teildatei löschen, wärend ein User diese noch im "Zugriff" hat!
Moin,
so wie du schon gesagt hast .. eben mit OVRDBF
h dftactgrp(*no) bnddir('QC2LE') Option( *NoDebugIO )
h datfmt(*dmy.) timfmt(*hms:) datedit(*dmy.) decedit('0,') debug(*yes)
d True c *On
d False c *Off
d* Prozedurn-Def. extern für C-Api "system"
d System pr 10i 0 extproc('system')
d * value options(*string)
d
d
d Befehl s 200 Inz('ovrdbf MyFile MyLib/MyFile -
d &Name ovrscope(*JOb)' )
d
d Teildatei s 10
c *Entry PList
c Parm Teildatei
c
c Eval Befehl = %Replace(%Trim(Teildatei) :
c Befehl :
c %Scan('&Name':Befehl) :
c 5 )
c
c CallP System( Befehl )
c
c/exec sql
c+ set option commit = *none
c/end-exec
c/exec sql
c+ Delete from MyFile
c/end-exec
c
c CallP System( 'dltovr Myfile lvl(*job)' )
c
c Eval *InLr = True
Gruß Ronald
a.) genau das funktioniert aber nicht!
(vielleicht mach ich ja auch was falsch)
Cmd = 'OVRDBF FILE(OUTPUT) ' + %trim('TOFILE(xxx/TEST)~') +
%trim('MBR(XXMSG)') + %trim('~OVRSCOPE(*JOB)');
Cmd = %xlate('~' : ' ' : Cmd);
CmdLen = %len(%trim(Cmd));
QCMDEXC(Cmd:CmdLen);
Exec Sql
delete from xxx / TEST;
Cmd = 'DLTOVR OUTPUT LVL(*JOB)';
CmdLen = %len(%trim(Cmd));
QCMDEXC(Cmd:CmdLen); b.) und deshalb würd mich ja auch interessieren, ob es nicht noch was anderes gibt?
Versuche es mal mit
delete from output
Denn auf die hast du ja dein OVRDBF gemacht !
Ronald
Meinen Code hatte ich getestet, und da ging es
a.) genau das funktioniert aber nicht!
(vielleicht mach ich ja auch was falsch)
Das ist eine ziemlich schwache Aussage!
Du solltest immer unmittelbar nach einem SQL-Befehl entweder den SQLCODE oder den SQLSTATE prüfen!
Also was ist der SQLCODE?
Birgitta