需求:通过oracle触发器监听某张表的变化
创建普通触发器
某张表新增后,将部分数据新增到指定表
CREATE OR REPLACE trigger TR_TABLEB_INSERT
--如果监听更新和删除,将句中INSERT 改为UPDATE 和DELETE即可
after INSERT ON tableA
FOR each row
BEGIN
INSERT INTO tableB(x,y,z)
VALUES (:new.x,:new.y,:new.z);--注意结尾的分号,否则报编译错误
END;
在触发器中调用查询语句,并使用查询结果参考文章
CREATE OR REPLACE TRIGGER TR_CT_INSERT
after INSERT ON tableA
FOR each row
DECLARE deviceType CHAR;
-- PRAGMA AUTONOMOUS_TRANSACTION;
-- deviceType PLS_INTEGER;
BEGIN
--注意必须写into
SELECT TYPE INTO testType FROM tableB WHERE m=:new.m AND DELFLAG = 0;
IF testType ='0' THEN
BEGIN
--等于0,处理
INSERT INTO tableC (x,y,z) VALUES(:new.x,'',:new.z);
END;
ELSIF testType ='1' THEN
BEGIN
--等于1,处理
-- 插入语句
END;
END IF;
END TR_CT_INSERT;
创建带有输出参数的存储过程
--存储过程,返回值时要写into
CREATE OR REPLACE PROCEDURE "test" (id IN VARCHAR2, testParam OUT CHAR)
AS
BEGIN
SELECT TYPE INTO testParam FROM tableName WHERE DELFLAG = 0;
END;
执行上述的存储过程
--调用有输出参数的存储过程
DECLARE testParam CHAR;
BEGIN
"test"('002',testParam);
dbms_output.put_line(testParam);
END;
oracle中if-else的写法参考文章
declare
result number;
begin
if 1>2 then begin
select ....
insert ...
update...
end;
else begin
delete....
insert...
select...
end;
end if;
end;
if-else if的写法,注意else if 的语法为ELSIF
DECLARE
BEGIN
IF 1 = 1
THEN
NULL;
ELSIF 1 = 1
THEN
NULL;
END IF;
END;