-- SQL und PL/SQL -- Anlegen von einer Tabelle für die Metadaten der Dokumente in BFILE Format -- und einer Tabelle als entsprechends Beckup für die gelöschten Datensätze. -- anlegen des Index vom Typ CTXSYS.CONTEXT -- Procedure put_file speichert die Daten des Dokuments in die Tabelle. -- Procedure history löscht die Daten aus der Tabelle mein_doc und schreibt sie in die Tabelle mein_doc_h. -- Dieses Script kann unter den Bedingungen der GPL verwendet werden. -- Copyright (C) 2004 Badran Farwati DROP TABLE mein_doc; DROP TABLE mein_doc_h; DROP SEQUENCE mein_doc_seq; DROP INDEX mein_doc_idx; CREATE TABLE mein_doc ( id NUMBER, file_name VARCHAR2(21), user_file_name VARCHAR2(255), upload_datum VARCHAR2(10), titel VARCHAR2(255), autor VARCHAR2(255), beschreibung VARCHAR2(255), groesse VARCHAR2(20), mime VARCHAR2(50), inhalt BFILE, CONSTRAINT doc_pk PRIMARY KEY (id) ); create table mein_doc_h ( id NUMBER, file_name VARCHAR2(21), user_file_name VARCHAR2(255), upload_datum VARCHAR2(10), titel VARCHAR2(255), autor VARCHAR2(255), beschreibung VARCHAR2(255), groesse VARCHAR2(20), mime VARCHAR2(50) ); CREATE SEQUENCE mein_doc_seq; CREATE OR REPLACE DIRECTORY dokumente AS '&1'; GRANT READ ON DIRECTORY dokumente TO ctxsys; CREATE INDEX mein_doc_idx ON mein_doc(inhalt) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC ( ON COMMIT)'); CREATE OR REPLACE PROCEDURE put_file ( p_file_name IN mein_doc.file_name%TYPE, p_user_file_name IN mein_doc.user_file_name%TYPE, p_upload_datum IN mein_doc.upload_datum%TYPE, p_titel IN mein_doc.titel%TYPE, p_autor IN mein_doc.autor%TYPE, p_beschreibung IN mein_doc.beschreibung%TYPE, p_groesse IN mein_doc.groesse%TYPE, p_mime IN mein_doc.mime%TYPE ) AS BEGIN INSERT INTO mein_doc (id, file_name, user_file_name, upload_datum,titel, autor, beschreibung,groesse, mime, inhalt) VALUES (mein_doc_seq.NEXTVAL, p_file_name, p_user_file_name, p_upload_datum, p_titel , p_autor, p_beschreibung, p_groesse, p_mime, BFILENAME('DOKUMENTE',p_file_name)); COMMIT; END; / CREATE OR REPLACE PROCEDURE history ( p_id IN mein_doc.id%TYPE ) as begin insert into mein_doc_h select id, file_name, user_file_name, upload_datum, titel, autor, beschreibung, groesse, mime from mein_doc where id = p_id; delete from mein_doc where id = p_id; commit; end; /