oracle編譯觸發器
『壹』 oracle 觸發器為什麼編譯不通過 大家幫忙看看。
觸發器應該沒有錯誤,如果編譯報錯,可能是當前用戶沒有訪問dbms_lock包的許可權,使用SYS用戶授權一下就可以了。
grant execute on DBMS_LOCK to 用戶名稱;
『貳』 Oracle如何創建觸發器
一般在sqlplus或者其他第三方oracle工具中,按照語法及需求寫好代碼,直接執行創建過程即可。
一般語法如下:
CREATE[ORREPLACE]TRIGGERtrigger_name
{BEFORE|AFTER}
{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}
[OR{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}...]
ON[schema.]table_name|[schema.]view_name
[REFERENCING{OLD[AS]old|NEW[AS]new|PARENTasparent}]
[FOREACHROW]
[WHENcondition]
PL/SQL_BLOCK|CALLprocere_name;
『叄』 oracle觸發器怎麼寫
創建觸發器,給觸發器命名,在哪個表上的增刪改進行觸發,是否為行級觸發
編寫你的邏輯
編譯檢查是否有語法錯誤啥的
測試,這里的話,就是你某一個工種的最低工資增加,那屬於這個工種的員工中原來是最低工資的也要增加,所以你要先把工種中最低工資查出來,根據工種號,查詢屬於該工種的人有哪些,把這些員工的工資查出來,再修改工種的最低工資,再查員工工資是否也增加了。
你這表也沒有,我門也沒有辦法給你寫一個很詳細的。大致思路一般是這樣
『肆』 oracle 觸發器提示創建的觸發器帶有編譯錯誤哪位大神能給看一下
這類編譯錯誤,一般是SQL語句敲錯,或者表名不存在。
你可以把其中的語句注釋掉大部分,然後看看有沒錯。
有錯,這樣就容易檢查
如果沒錯,就釋放出來一點語句檢查。
很快就搞定錯誤了,加油!
『伍』 oracleXE里怎麼編譯觸發器和存儲過程
你先得創建幾個表,在表上建立觸發器
還可以再寫幾個簡單的過程
過程例子:
create or replace procere pro_name(...)--可帶參數,也可不帶
is
... --定義變數
begin
... --具體代碼
end pro_name;
觸發器例子:
create or replace trigger tri_name
before/after insert/delete/update on table_name
for each row
is
... --變數定義
begin
... --具體代碼
end tri_name;
有問題可以HI我
『陸』 Oracle的觸發器怎麼寫
我以前做的一個例子,你參考下吧
第八章 觸發器(Trigger)
--格式:
create or replace trigger 名稱
[after|before][delete|update|insert]
[on 表 | on schema]
[referencing new as 別名 old as 別名]
[for each row]
declare
....
begin
...
exception
....
end;
--創建一個delete類型行級觸發器
--刪除的一行數據保存在:old
create or replace trigger emp_delete_row_trigger
after delete
on emp
referencing new as n old as o
for each row
begin
dbms_output.put_line('emp_delete_row_trigger called.');
dbms_output.put_line('刪除員工:' || :o.empno || ' ' || :o.ename);
end;
delete from emp where empno=7499;
delete from emp;
--創建一個insert類型行級觸發器
--插入的一行新數據保存在:new
create or replace trigger emp_insert_row_trigger
after insert
on emp
for each row
begin
dbms_output.put_line('emp_insert_row_trigger called.');
dbms_output.put_line('添加員工:' || :new.empno || ' ' || :new.ename);
end;
insert into emp(empno,ename) values(1,'empxxx');
--創建一個update類型行級觸發器
--修改前的數據保存在:old
--修改後的數據保存在:new
create or replace trigger emp_update_row_trigger
after update
on emp
for each row
begin
dbms_output.put_line('emp_update_row_trigger called.');
dbms_output.put_line('修改前:' || :old.empno || ' ' || :old.ename);
dbms_output.put_line('修改後:' || :new.empno || ' ' || :new.ename);
end;
update emp
set ename='xxxx'
where empno=7499;
--語句級觸發器(update,delete,insert)
create or replace trigger delete_stmt_trigger
after delete
on emp
begin
dbms_output.put_line('delete_stmt_trigger called.');
end;
delete from emp;
--判斷觸發器類型
----------------------------------------------------------
--每進行一次交易,就要調用觸發器,自動扣除或增加賬戶金額
----------------------------------------------------------
create table account
(
customerName varchar2(30) primary key,
cardID varchar2(8),
currentMoney number
);
insert into account values('Daivd','10010001',5000);
insert into account values('Jason','10010002',3000);
create table trans
(
transDate date,
cardID varchar2(8),
transType varchar2(10),
transMoney number
);
insert into trans
values(sysdate,'10010001','取款',1000);
create or replace trigger trans_trigger
before insert
on trans
for each row
declare
v_currentMoney account.currentMoney%type;
begin
--判斷類型
if :new.transType='取款' then
--取款
select currentMoney into v_currentMoney
from account
where cardID=:new.cardID;
if v_currentMoney < :new.transMoney then
raise_application_error(-20001,'余額不足');
end if;
update account
set currentMoney=currentMoney-:new.transMoney
where cardID=:new.cardID;
else
--存款
update account
set currentMoney=currentMoney+:new.transMoney
where cardID=:new.cardID;
end if;
exception
when no_data_found then
raise_application_error(-20002,'無效的帳戶');
end;
--模式(schema)級觸發器
create or replace trigger schema_trigger
before drop
on schema
begin
dbms_output.put_line('schema_trigger called');
dbms_output.put_line(ora_dict_obj_name);
dbms_output.put_line(ora_dict_obj_type);
if ora_dict_obj_name='ACCOUNT' then
raise_application_error(-20003,'ACCOUNT表不能被刪除');
end if;
end;
drop table account;
--ora_dict_obj_name 操作對象名稱
--ora_dict_obj_type 操作對象類型
--啟用觸發器
alter trigger schema_trigger enable;
--禁用觸發器
alter trigger schema_trigger disable;
『柒』 如何編寫oracle的觸發器
這個問題和前幾天的一個問題類似,參考一下如下代碼:
create or replace trigger test_log_trigger
before insert on test_log
referencing new as n for each row
declare
v_count number;
begin
begin
select count(1) into v_count from test_log t where t.num=:n.num and t.name=:n.name;
Exception When Others Then
RAISE_APPLICATION_ERROR(-20009, sqlerrm);
end;
if v_count > 0 then
update test t
set /*修改哪些數據*/,
where t.num=:n.num and t.name=:n.name;
end if;
if v_count = 0 then
insert into test
(id, name, num,remark)
values
(:n.id,:n.name,:n.num,:n.remark);
end if;
Exception When Others Then
RAISE_APPLICATION_ERROR(-20022, sqlerrm);
end;
前幾天的問題連接:http://..com/question/382137823.html?oldq=1
『捌』 oracle中觸發器都有幾種
oracle中觸發器有三種
1.DML觸發器
ORACLE可以在DML語句進行觸發,可以在DML操作前或操作後進行觸發,並且可以對每個行或語句操作上進行觸發。
2 .替代觸發器
由於在ORACLE里,不能直接對由兩個以上的表建立的視圖進行操作。所以給出了替代觸發器。它就是ORACLE 8專門為進行視圖操作的一種處理方法。
3. 系統觸發器
ORACLE 8i 提供了第三種類型的觸發器叫系統觸發器。它可以在ORACLE資料庫系統的事件中進行觸發,如ORACLE系統的啟動與關閉等。
『玖』 oracle 觸發器
你在修改或者插入數據的時候把a欄位的值也插入進去不就得了。。
或者,如果a的值是固定的。
那修改下表結構也可以。
alter table tableA modify (a varchar2(8) default '000');
就是給這個欄位一個默認值。
『拾』 ORACLE在創建觸發器時發生編譯錯誤
create or replace trigger emppp
before insert or update or delete
on emo
declare
var_action varchar2(30);
begin
if inserting then
var_action:='INSERT';END IF;
if updating then
var_action:='UPDATE';END IF;
if deleting then
var_action:='DELETE';
end if;
insert into empp
values(user,sysdate,var_action);
end emppp;