Игнорировать некоторые условия в «случае» - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать скрипт, который будет автоматически получать ограничения из системной таблицы в Oracle, я просто хочу первичный ключ (P) и внешний ключ (R), и я должен игнорировать другие ограничения, такие как C, U, V, O .

SELECT
    B.COLUMN_NAME,
    CASE
      WHEN A.CONSTRAINT_TYPE = 'P' THEN ', PRIMARY KEY('||B.COLUMN_NAME||')'
      WHEN A.CONSTRAINT_TYPE = 'R' THEN ', FOREIGN KEY('||B.COLUMN_NAME||') 
      REFERENCES'||' '||(SELECT TABLE_NAME FROM all_cons_columns WHERE OWNER 
      ='XXXXXXX' AND COLUMN_NAME = B.COLUMN_NAME AND CONSTRAINT_NAME != 
      A.CONSTRAINT_NAME) ||'('||B.COLUMN_NAME||')'
    ELSE ' '
    END AS CONSTRAINTS
    FROM ALL_CONSTRAINTS A JOIN TABLE_SCRIPT2 B
    ON B.CONSTRAINT_NAME = A.CONSTRAINT_NAME
    WHERE OWNER= 'XXXXXXX' 
    AND TABLE_NAME = 'XXXXXXX'  )

Когда я запускаю скрипт, я получаю вывод, подобный этому

   , PRIMARY KEY(XXXXXXX)














, FOREIGN KEY(XXXXXX) REFERENCES YYYYY(XXXXX)

для других ограничений я получил пробелы, если я уберу условие else, я получу (ноль) вместо пробелов, как получить только P, K без нуля или пробела.

1 Ответ

0 голосов
/ 09 ноября 2018

Добавьте нижеуказанное условие к WHERE caluse

A.CONSTRAINT_TYPE IN ('P','R') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...