-- 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;


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 
  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, BFILENAME('DOKUMENTE',p_file_name)); 
  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;
/
