82 lines
2.2 KiB
MySQL
82 lines
2.2 KiB
MySQL
|
|
-- =============================================================================
|
|||
|
|
-- DC_REFERENCES_ALTER.sql
|
|||
|
|
-- Ergänzt dc_project_documents um Felder für heruntergeladene externe Referenzen.
|
|||
|
|
-- parent_document_id → Self-FK auf das Originaldokument (NULL bei Originalen)
|
|||
|
|
-- is_reference → 0 = Originaldokument, 1 = heruntergeladene Referenz
|
|||
|
|
-- source_url → Ursprungs-URL der heruntergeladenen Referenz
|
|||
|
|
-- Idempotent: Fehler "Spalte/Constraint existiert bereits" wird ignoriert.
|
|||
|
|
-- =============================================================================
|
|||
|
|
|
|||
|
|
BEGIN
|
|||
|
|
EXECUTE IMMEDIATE '
|
|||
|
|
ALTER TABLE dc_project_documents ADD (
|
|||
|
|
parent_document_id NUMBER,
|
|||
|
|
is_reference NUMBER DEFAULT 0,
|
|||
|
|
source_url VARCHAR2(2000 CHAR)
|
|||
|
|
)
|
|||
|
|
';
|
|||
|
|
DBMS_OUTPUT.PUT_LINE('Spalten parent_document_id/is_reference/source_url angelegt.');
|
|||
|
|
EXCEPTION
|
|||
|
|
WHEN OTHERS THEN
|
|||
|
|
IF SQLCODE = -1430 THEN
|
|||
|
|
DBMS_OUTPUT.PUT_LINE('Spalten existieren bereits – kein Änderungsbedarf.');
|
|||
|
|
ELSE
|
|||
|
|
RAISE;
|
|||
|
|
END IF;
|
|||
|
|
END;
|
|||
|
|
/
|
|||
|
|
|
|||
|
|
-- Bestehende Zeilen initialisieren
|
|||
|
|
UPDATE dc_project_documents
|
|||
|
|
SET is_reference = 0
|
|||
|
|
WHERE is_reference IS NULL;
|
|||
|
|
|
|||
|
|
COMMIT;
|
|||
|
|
|
|||
|
|
-- Self-FK (idempotent)
|
|||
|
|
BEGIN
|
|||
|
|
EXECUTE IMMEDIATE '
|
|||
|
|
ALTER TABLE dc_project_documents
|
|||
|
|
ADD CONSTRAINT dc_project_documents_parent_fk
|
|||
|
|
FOREIGN KEY (parent_document_id) REFERENCES dc_project_documents (id)
|
|||
|
|
';
|
|||
|
|
EXCEPTION
|
|||
|
|
WHEN OTHERS THEN
|
|||
|
|
IF SQLCODE IN (-2264, -2261, -2275) THEN NULL; -- Constraint existiert bereits
|
|||
|
|
ELSE RAISE;
|
|||
|
|
END IF;
|
|||
|
|
END;
|
|||
|
|
/
|
|||
|
|
|
|||
|
|
-- Check-Constraint is_reference (idempotent)
|
|||
|
|
BEGIN
|
|||
|
|
EXECUTE IMMEDIATE '
|
|||
|
|
ALTER TABLE dc_project_documents
|
|||
|
|
ADD CONSTRAINT dc_project_documents_is_ref_ck
|
|||
|
|
CHECK (is_reference IN (0, 1))
|
|||
|
|
';
|
|||
|
|
EXCEPTION
|
|||
|
|
WHEN OTHERS THEN
|
|||
|
|
IF SQLCODE IN (-2264, -2261) THEN NULL; -- Constraint existiert bereits
|
|||
|
|
ELSE RAISE;
|
|||
|
|
END IF;
|
|||
|
|
END;
|
|||
|
|
/
|
|||
|
|
|
|||
|
|
-- Index auf parent_document_id (idempotent)
|
|||
|
|
BEGIN
|
|||
|
|
EXECUTE IMMEDIATE '
|
|||
|
|
CREATE INDEX dc_project_documents_parent_i ON dc_project_documents (parent_document_id)
|
|||
|
|
';
|
|||
|
|
EXCEPTION
|
|||
|
|
WHEN OTHERS THEN
|
|||
|
|
IF SQLCODE = -955 THEN NULL; -- Index existiert bereits
|
|||
|
|
ELSE RAISE;
|
|||
|
|
END IF;
|
|||
|
|
END;
|
|||
|
|
/
|
|||
|
|
|
|||
|
|
COMMIT;
|
|||
|
|
|
|||
|
|
EXIT;
|