【发布时间】:2014-05-19 17:25:25
【问题描述】:
我想创建一个触发器,在删除表客户端之前为每一行执行,我想做的是当有人试图删除一行时:
DELETE FROM Clients WHERE id=5 AND name = 'test';
我想在屏幕上打印一些东西,例如: “您删除了以下条件:id 为 5,名称为 test” 或者执行另一个具有相同条件的查询...
非常感谢任何形式的帮助
编辑
假设用户输入了以下查询:DELETE FROM Clients where name = 'test'
create or replace
TRIGGER DELETECLIENT
BEFORE DELETE ON CLIENTS
DECLARE
pragma autonomous_transaction;
name1 clients.name%Type;
BEGIN
select name into name1 from clients where name = %I want here the name in the user query %;
IF name1 != null THEN
DELETE FROM clients WHERE name = name1;
commit;
END IF;
END;
我测试过的:
我尝试添加 :old.name 和 :new.name ,但是当我的数据库中不存在该行时这不起作用
PS:我这样做只是为了教育目的,我知道脚本没有意义。我只是想知道如何完成以下任务:获取查询中 WHERE 之后键入的参数
【问题讨论】:
-
标题与问题有什么关系?在任何 PL/SQL 中“显示”一条消息实际上是没有意义的,因为您不能假设客户端会实际显示它。你的意思是你想为某些值引发异常,并做其他事情 - '执行查询'!? - 否则?
-
PL/SQL 不会“在屏幕上打印”。
-
@AlexPoole 是的,我想这样做:raise_application_error(-20050, 'bla bla');我知道它取消了查询,但没关系
-
所以……我还是没看懂标题,你想知道
if ... then在PL/SQL中是如何工作的吗?到目前为止,您有什么触发代码 - 请将您当前的版本添加到问题中。 -
@AlexPoole 请检查编辑
标签: sql oracle triggers sqlplus plsqldeveloper