-- SQL und PL/SQL --Anlegen von einer Tabelle für die Metadaten der Dokumente in BLOB 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 INDEX mein_doc_idx; DROP SEQUENCE mein_doc_seq; CREATE TABLE mein_doc ( id NUMBER NOT NULL, file_name VARCHAR2(21) NOT NULL, 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 BLOB NOT NULL, CONSTRAINT doc_pk PRIMARY KEY (id) ); create table mein_doc_h ( id NUMBER, file_name VARCHAR2(211111111111), 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; 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 var_bfile BFILE; var_blob BLOB; doc BLOB; index_name VARCHAR2(20) := 'mein_doc_idx'; 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, empty_blob()) RETURN inhalt INTO var_blob; var_bfile := BFILENAME('DOKUMENTE', p_file_name); Dbms_Lob.Fileopen(var_bfile, Dbms_Lob.File_Readonly); Dbms_Lob.Loadfromfile(var_blob, var_bfile, Dbms_Lob.Getlength(var_bfile)); Dbms_Lob.Fileclose(var_bfile); COMMIT; CTX_DDL.SYNC_INDEX(idx_name=>index_name); 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; /