Реализация проверки бизнес-правил в виде триггеров:
CREATE OR REPLACE TRIGGER check_sal
BEFORE UPDATE OF sal ON emp
FOR EACH ROW
WHEN (new.sal<old.sal OR new.sal>old.sal*1.1)
BEGIN
RAISE_APPLICATION_ERROR(-20508, ‘Do not decrease salary not increase by more than 10%’);
END;
SHOW ERRORS – показ ошибок компиляции в SQL*Plus
перекомпиляция инвалидных пакетов:
declare
str varchar2(200);
err varchar2(2000);
cursor c_obj is
select object_name, object_type from user_objects where status=upper(‘invalid’);
begin
for c1 in c_obj loop
if c1.object_type=upper(‘package body’) then
str:=’alter package ‘||c1.object_name||’ compile body’;
else
str:=’alter ‘||c1.object_type||’ ‘||c1.object_name||’ compile’;
end if;
begin
execute immediate str;
exception
when others then
select text
into err
from user_errors
where name=c1.object_name and type=c1.object_type and rownum=1;
dbms_output.put_line(c1.object_name||’:’||err);
err:=null;
end;
end loop;
end;
использование условий типа:
where (i.id, i.date1) in (select k.id, k.date2 from table2) –почему такую конструкцию мы не использовали раньше – загадка, как говориться – век живи – век – учись