on ‎2012 Sep 11 2:21 PM
I have two folders that the database writes files to using the directory access features. The destination folder is a landing point for documents requested by a webpage. Once they are viewed by the webpage they are no longer useful and can be cleaned up at some point.
My initial plan was to have an event that ran each night to delete files from this folder that had a create date older than 30 minutes prior.
This query displays the records I would want to delete correctly:
SELECT * FROM ClientDataLand WHERE create_date_time <= DATEADD(MINUTE,-30,NOW())
The problem is that generates Error code -728 -- Update operation attempted on non-updatable remote query.
So how could one delete from a directory access server based on conditions, such as the create time?
Request clarification before answering.
Directory Access Servers are pretty picky about the type of cursors allowed on them. You can get around the issue by using a cursor in a stored procedure that only calls fetch next :
create procedure DelFiles ( in @expire integer ) begin declare @fn varchar(128); declare @cur cursor for select file_name from DBA.MyDir where create_date_time < dateadd( minute, -1 * @expire, now() ); open @cur; fetch next @cur into @fn; while sqlcode = 0 loop delete from DBA.MyDir where file_name = @fn; fetch next @cur into @fn; end loop; close @cur; end
In this example, I've allowed you to pass in a parameter specifying how many minutes old a file should be to be deleted.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I second that question.)
Possibly even a positioned delete would do? - As to Nick's explanation, I would think it's just that the DELETE on a directory access table needs a single filename as parameter, not any other condition, so the cursor shouldn't be a problem here... but I don't know myself.
| User | Count |
|---|---|
| 9 | |
| 5 | |
| 4 | |
| 4 | |
| 3 | |
| 3 | |
| 2 | |
| 2 | |
| 2 | |
| 2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.