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 te informacje. były kluczowe
Dobrze wyjaśnione, dzięki !
a z innej strony - co gdybym ciąg znaków chciał mieć rozbity nie na wiersze a na kolumny? Czyli ciąg ABCD: 1. kolumna: A, 2. kolumna: B, 3. kolumna: C, 4 kolumna: D?
Ciekawy artykuł.
Czy można za pomocą EF wysłać swoje zapytanie?
Czy lepiej do tego użyć ADO.net i DataTable?