У мене є тригер db, і я хотів би, щоб у певному з'єднанні він не робив його вставлення / оновлення / видалення.
Я думав про використання значення атрибута у своємукод plsql, який вказує, чи є це з'єднання його від певного виду. Я хочу встановити цей атрибут з'єднання в java. Як я можу це зробити? І якщо цього не можна зробити, я відкритий для інших пропозицій, як зробити тригер для того, щоб не робити його логіку в деяких з'єднаннях (залежить від того, які цілі з'єднання).
Відредаговано:
Дякую, хлопці, я думаю, що я маю інше рішення для своєї проблеми. насправді в полі я вставив поле (яке спрацьовує тригер), яке допоможе мені вказати, чи повинен тригер спрацьовувати чи ні.
Відповіді:
0 для відповіді № 1Один із способів, що я можу придумати, - це використовувати dbms_application_info
передати значення до client_info
.
У вашій програмі Java виконайте:
cstmt = connection.prepareCall("{call dbms_application_info.set_client_info(?)}");
cstmt.setString(1, "no_triggers");
cstmt.execute();
Тоді у своєму спуску ви можете зробити щось подібне:
create or replace trigger ...
as
declare
l_info varchar(65);
begin
dbms_application_info.read_client_info(l_info);
if l_info = "no_triggers" then
return;
end if;
... actual trigger code follows here
end;
0 для відповіді № 2
Не слід використовувати спеціальний тригер для контролю доступу користувачів, оскільки він може легко стати кошмаром технічного обслуговування. Натомість створіть виділений ROLE
або PROFILE
яка є тільки GRANT
ред SELECT
на тій таблиці, яку ви використовуєте для свого "спеціального" з'єднання.