Spis treści:

Kategoria:Oracle


Dodawanie kolumny do tabeli tylko wtedy, gdy nie istnieje - ORACLE

Jakiś czas temu opisywałem różne techniki radzenia sobie z tego typu problemem w bazie danych SQL Server (Dodawanie kolumny w SQL Server tylko wtedy, gdy nie istnieje). Los chciał, żebym napisał coś podobnego pod bazę danych ORACLE. Problem był podobny: niektórzy klienci kolumnę mają, niektórzy jej jeszcze nie mają. Co zrobić aby u żadnego klienta skrypt nie wyświetlił błędu? Próba dodania drugi raz takiej samej kolumny może skończyć się błędem o następującej treści:

SQL Error: ORA-01430: dodawana kolumna już istnieje w tabeli
01430. 00000 - "column being added already exists in table"

Skrypt, kod, czyli rozwiązanie

Żeby nie przedłużać, przedstawię gotowy skrypt. Wystarczy tylko skopiować i podmienić Tabela na własną nazwę tabeli, a Kolumna na własną nazwę kolumny. Żeby nie było nieporozumień, Tabela i Kolumna występują w skrypcie po dwa razy.

DECLARE cnt NUMBER;
BEGIN
  SELECT COUNT(*) INTO cnt FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'Tabela'
    AND COLUMN_NAME = 'Kolumna' AND ROWNUM<=1;
  IF cnt=0 THEN
    EXECUTE IMMEDIATE 'ALTER TABLE Tabela ADD Kolumna NUMBER(3,0) NULL';
  END IF;
END;

Kategoria:Oracle

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Dzieki za rozjasnienie zagadnienia upsert. wlasnie sie ucze programowania :).
Co się stanie gdy spróbuję wyszukać:
SELECT * FROM NV_Airport WHERE Code='SVO'
SELECT * FROM V_Airport WHERE Code=N'SVO'
(odwrotnie są te N-ki)
Będzie konwersja czy nie znajdzie żadnego rekordu?