Скрытие вывода в определенных столбцах

#sql #oracle #security #database-cursor

#sql #Oracle #Безопасность #база данных-курсор

Вопрос:

Я написал пакет, в котором есть хранимая процедура и курсор ССЫЛКИ. Теперь я могу отобразить все столбцы в моей таблице с помощью этого курсора. Я хотел бы иметь возможность вставить цикл, в котором при выполнении определенного условия четыре из семи столбцов будут отмечены четырьмя звездочками, а остальные столбцы будут отображаться с их обычными данными.

Например, у меня есть столбец под названием country. Каждый раз, когда США появляется в записи, четыре столбца (empid, ss, address, dept) должны будут отображать только ****, в то время как остальные столбцы будут отображаться как обычно. Если в записи указана страна, которая не является США, то во всех столбцах данные будут отображаться в обычном режиме. Я знаю, что есть функция noprint, но, похоже, я не могу понять, как просто показать звездочки.

Ответ №1:

Вместо того, чтобы использовать что-то сложное для этого, просто используйте CASE выражение:

SELECT CASE WHEN Country = 'USA' THEN '*****' Else EmpID END as EmpID

Комментарии:

1. 1, всегда делайте это сначала в SQL, если это возможно. Если вы не можете этого сделать, тогда посмотрите на процедурные параметры.

2. Спасибо. Мне нужно использовать хранимую процедуру, чтобы исключить прямой доступ к таблице из приложения. Есть ли способ, которым я могу использовать это выражение CASE для курсора? Я попытался ввести его, но получаю некоторые ошибки.

3. Почему бы вам не использовать VIEW вместо CURSOR ? В любом случае, просто поместите CASE в свой SELECT , где бы он ни находился (курсор или в другом месте)

4. Хорошо, я попробую это. Я не могу использовать представление, поскольку оно либо показывает столбец, либо нет. Мне нужно скрыть некоторые данные, но не все в столбце. Еще раз спасибо.

5. @Christopher — Вы также можете использовать CASE внутри представления. CURSORS почти никогда не являются правильным решением какой бы то ни было проблемы.