2012-04-20 2 views
3
select NVL(B.SEQID, A.LVL5_ID) LVL6_ID, NVL(B.NAME, ' ') LVL6_NAME, A.LVL5_ID 
FROM LVL5 A, ABC B WHERE A.LVL5_ID = B.LVL7 

Вышеуказанный запрос - это то, что определяет вид в моей системе. Здесь я хотел бы знать, почему использовался NVL.NVL Функциональность

Дело в том, что SEQID является столбцом первичного ключа и не может быть нулевым. так нужна ли здесь NVL?

может B.SEQID быть пустым, если нет записей, удовлетворяющих где положение можно найти? (Я знаю, что это не делает чувство, но я просто должен был спросить)

ответ

3

Что делает ваша функция nvl, она заменяет все значения NULL, которые она встречает в B.SEQID со значением A.LVL5_ID.

Утверждение, что B.SEQID является первичным ключом, делает этот NVL бесполезным в вашем запросе, поскольку первичный ключ никогда не может содержать нулевое значение. Однако уникальный ключ, безусловно, может содержать несколько нулевых значений.

Если предложение where не имеет соответствия ни с чем, оно не вернет нулевое значение, а «нет строк», которое является сообщением обратной связи.

+0

большое спасибо! имеет смысл – MozenRath

1

ограничение первичного ключа является уникальным ключом ограничение плюс не нулевое ограничение. Таким образом, он гарантирует, что столбец под ним является обязательным. Таким образом, вы можете с радостью удалить NVL.

С уважением,
Rob.

+0

большое спасибо! сделаю – MozenRath