#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
почти никогда не являются правильным решением какой бы то ни было проблемы.