Instrukcja ‘IF’ w Czystym DDL – Czy To Możliwe?

Tak, jest to możliwe. Wykorzystując zmienne SQL, można sterować pewnymi zachowaniami instrukcji DDL jak np w poniższym przykładzie, gdzie tworzona jest tabela z pierwszą partycją, której zakres górny określony jest przez warunek.

SET DEFINE ON;

DEFINE first_partition_date = '2020-03-02';
COLUMN first_partition_date_txt NEW_VALUE first_partition_date;

SELECT 
  CASE 
    WHEN 1=2 --specjalnie taki zapis, aby data zostala ustawiona zgodnie z SYSDATE
      THEN '&first_partition_date.' --Wartosc oryginalna 2023-03-02
    ELSE TO_CHAR(SYSDATE, 'YYYY-MM-DD') 
  END AS first_partition_date_txt
FROM dual
/

DROP TABLE T1
/

CREATE TABLE T1
(
  log_timestamp     TIMESTAMP(6) DEFAULT SYSTIMESTAMP,
  stage             VARCHAR2(64)
)
PARTITION BY RANGE (LOG_TIMESTAMP) INTERVAL(numtodsinterval(1,'day'))
(
  PARTITION P_FIRST VALUES LESS THEN (TO_DATE('&first_partition_date.', 'YYYY-MM-DD', 'NLS_CALENDAR=GREGORIAN'))
)
/

I tak dzięki wykorzystaniu zmiennych SQL, zostanie utworzona tabela T1 z partycją P_FIRST, której górny zakres zostanie ustawiony zgodnie z SYSDATE. Nic nie stoi na przeszkodzie, aby ten sam zabieg wykorzystać przy instrukcjach DML.

Szymon

Komentarze |0|

Legenda *) Pola oznaczone gwiazdką są wymagane
**) Możesz używać tych znaczników i atrybutów HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Kategoria: SQL