SQL delete

as400

    Sponsored Links

    Next

  • 1. Upgrading from V4R4M0 to V5R1M0
    I need your help. We have a 720 running on v4r4 and we are planning to go to v5r1. I have read all the documentation about the upgrade and I feel that we should be OK to go to v5r1. But I have a slight disagreement with the boss. He believes that we don't need the latest CUM for v4r4 before we upgrade to v5r1. I, on the other hand, believe that we do need it. The question is, do we need the latest cum or not? Also, I understand that they have never kept up with PTFs. Meaning, they have never installed any PTFs since they went to v4r4. Any information, help, would be greatly appreciated.
  • 2. API to convert to PDF
    Does anyone know what apis are used to convert a spool file to a pdf document? Thanx for the help Bob
  • 3. Guest M36 killing my machine
    Hi, I hope someone can help me out with this one, as I don't know where to start. We are currently running a M36 machine as a guest on our AS/400, o/s v4r4. The problem we have is that occassionally a system task kicks in durring the day (any time), and takes up most of the CPU e.g. over 90%. This task is therefore bring the system to a halt, has anyone else come across anything similar or knows what I can do to stop this occurring? The task is called: 36012EMULA Thanks Warren
  • 4. sql connected to many database
    Hi, I have a AS400 A and another AS400 B. I work always on A. I can use sql with the files of A. With the statment CONNECT, I can access to the files of B. But, is it possible to use only one SELECT that acces to a file of A and a file of B ? (in the same statment) Example (filea on A and fileb on B) : select * from filea a, fileb b where a.key = b.key Thanks.

SQL delete

Postby arrowcomputer » Tue, 13 Jul 2004 21:04:08 GMT

I am trying to delete records in one file based on criteria in a
second file.  I have the select running, and it select the proper
records.  I'm trying to figure the syntax of the delete.

The select :
select *  from SLALLO, MBADREP where ADAKDT > 1040731 and ADUUQ1
ADDCCD=ORTP and ADCVNB=ORDNO and ADFCNB=ITMSQ and ADHFCD < '50'     
order by ADCVNB   

The ADxxxx fields are from file MBADREP, the others from file SLALLO. 
I want to delete the SLALLO records that meet the where criteria.

My first attempt was (but failed syntax) - I tried several versions,
but I'm missing something here.

delete from                                                   
SLALLO, MBADREP  where ADAKDT > 1040731 and ADUUQ1                 
ADDCCD=ORTP and ADCVNB=ORDNO and ADFCNB=ITMSQ and ADHFCD < '50'

Re: SQL delete

Postby Charles Wilt » Tue, 13 Jul 2004 22:03:57 GMT

Terence,

SQL can't handle what you want to do.  You can't do a join during a 
delete.  You will need to make use of a subselect with an "in" or 
"exists" predicate.  For example, say I want to delete all order detail 
lines for orders more than a year old.  Problem is the order date only 
appears in the order header file.  So I'd need to to the following 
subselect:

delete from orderdtl
where ordernbr in (select ordernbr from orderhdr
                   where orderdate <= current_date + year(1)
                  )


exists is a little less straight forward.  At least for me as I don't 
use it often.  I think the following is correct:

delete from orderdtl A
where exists (select * from orderhdr B
              where orderdate <= current_date + year(1)
                and A.ordernum = B.ordernum
                and A.key2 = B.key2
             )


HTH,
Charles



In article < XXXX@XXXXX.COM >, 
 XXXX@XXXXX.COM  says...

Re: SQL delete

Postby LH » Tue, 13 Jul 2004 22:35:32 GMT

Terence I think it is possible.
Please make a good back-up (as always :)  of both files and try this:

Delete from SLALLO
where exists
(select  * from MBADREP
where   SLALLO .CONO = MBADREP .ADAENB
and  SLALLO.ORTP = MBADREP.ADDCCD
and SLALLO.ORDNO = MBADREP.ADCVNB
and SLALLO.ITMSQ = MBADREP.ADFCNB
and SLALLO.ITMSQ = MBADREP.ADFCNB
and  MBADREP.ADUUQ1 > 0
and MBADREP.ADZ93N < ADUUQ1
and MBADREP.ADA3CD  like '4%'
and MBADREP.ADHFCD < '50' )



Good luck
Loes



Re: SQL delete

Postby arrowcomputer » Wed, 14 Jul 2004 04:10:22 GMT

Thanks.   The "where exists" is the part I was missing.






Similar Threads:

1.Stupid SQL delete from logical file question

In DB2/400, if I run this statement:  delete from ordvcrec a where
not
exists(select * from i$paint b where a.part#=b.i$part)

Where ORDVCREC is a join logical of physical files ORDVALID and
ORDMASCREC, will the rows being deleted be the "logical" rows from
ORDVCREC only, or could physical rows (records) be wiped out in
ORDVALID or ORDMASCREC?


I am assuming that only logical rows will be deleted from ORDVCREC,
but I am afraid to try it...


Thanks for any and all opinions and answers...

2.SQL (Insert/Delete) Testing ?

Since SQL is very powerful is there an easy way to simulate whatif(s)
if such SQL commands are ran against a PF.  My current work around to
this is copying files and then evaluating my results, I did not know
if there is an easiear way to do this.  I have used the apyjrnchg
command and rmvjrnchg command to move records back etc but did not
know if there is a quick and easy way to do this, thanks.

3.SQL : to delete spaces in a string

4.SQL RPGLE cursor delete from view? -204

real world app with SQL (did SQL in school but never had to used it)
done SQL in excel macros and net.data, but never needed to manipulate
the data
and most have been "select * from file with status = 'A'"...simple
so...now i am going complex

i have a huge select statement joining 6 files, with some selection
once i read it in, i need to delete a row if it meets a certain type,
then read the previous row and delete it also.

heres the code
i have taken variable names out, shortened some code(to protect the
innocent)

my problem is the delete, i get a SQLCOD = -204 in which the 
DSPMSGD RANGE(SQL0204) MSGF(QSQLMSG) is a whole lotta help

C/exec sql                                                         
C+ declare C1 dynamic scroll cursor for                  
C+ select t1.f1,t1.f2,t1.f2 ...                                       
C+ as   tview                                                      
C+ from CSHDET T1, CSHSUM T2, INVMST T3, CUSTH T4, CUSADRL1 T5,    
C+      MSTZEM T6                                                  
C+ where t1.f1 = t2.f1    and                          
C+       t1.f2 = t2.f2     and                          
C+ ....
C+ order by f1, f2...
C/end-exec                                                         

C/exec sql  
C+ open  C1 
C/end-exec  

C                   dou       SQLCOD <> 0  

C/exec sql                  
C+ fetch C1 into :f1,   
C+          :f2,         
C+          :f3,        
C+ ...
C/end-exec                  

C                   if        SQLCOD =  0                             
C                   if        f3 = '11'
                                                                      
C/exec sql                                                            
C+  delete from tview where current of C1                             
C/end-exec                                                            

C/exec sql                          
C+ fetch PRIOR from C1 into :f1,
C+          :f2,                 
C+ ...
C/end-exec                          

C/exec sql                                                            
C+  delete from tview where current of C1                             
C/end-exec                                                            

C                   endif  
C                   enddo  

C/exec sql                 
C+ close C1                
C/end-exec                 


initially i had it just selecting and printing records out just so i
could get the SQL RPG concepts down, then i added in the deleting

i think i am not understanding the "view" and "cursor" 

thanx in advance

5.SQL on Fire - Mass Deleting Data.

Linux Db2 LUW V8 FP 15

I was readiong Serge SQL on Fire presentation (part 2), and there is
a slide that shows how to mass delete data using procedures. Something
like:

loop: LOOP
DELETE FROM  (SELECT 1 FROM Table WHERE InvDate <= dt   FETCH FIRST
1000 ROWS ONLY) AS D;
IF SQLCODE = 100 THEN LEAVE loop;
END IF;
COMMIT;
END LOOP loop;

I have studied the access plan of the statement above, and compared it
to the plan of the statements my application runs (a simple 'delete
from table where ID=? and timestamp between ? and ?').

The plans are exactly the same, with the same Total Cost.

Question: Should I expect delete performance improvement if I use
procedures with Fetch First X rows, like Serge example ?  How does
this compare to single DELETE statements, in terms of performance ?

Thanks in advance.

-Michel.

6. * * * Important Please Delete * * * ( 666 asterisks deleted )

7. catch sql exceptions in sql procedure

8. exec more than 1 sql statement within an sql procedure handler



Return to as400

 

Who is online

Users browsing this forum: No registered users and 2 guest