導航:首頁 > 源碼編譯 > oracle編譯觸發器的命令

oracle編譯觸發器的命令

發布時間:2022-11-17 16:08:40

⑴ LINUX下,對ORACLE資料庫腳本(比如存儲過程或是觸發器)進程編譯,用哪個命令

sqlplus里
@${filename}

showerror -- 查看編譯錯誤

⑵ oracle 觸發器

CREATE OR REPLACE TRIGGER insert_trigger
AFTER INSERT ON emp
DECLARE
CURSOR c_rows IS
SELECT 'id',salary from emp;
BEGIN
for c_each_row in c_rows loop
if c_each_row.salary<0 THEN
update emp set salary=0 where id=c_each_row.id;
else if c_each_row.salary>10000 THEN
update emp set salary=10000 where id=c_each_row.id;
end if;
end loop;
END insert_trigger;

⑶ 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如何創建觸發器

一般在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 創建觸發器的一些例子。

⑹ oracle建立觸發器 success with compilation error

1、oracle資料庫中的觸發器,insert into users values('05','trigger','普通','trigger','擁有一般許可權');。

⑺ 求一個oracle觸發器的寫法:

這個我知道,因為我也犯過類似的錯誤,其實本身創建觸發器語句沒什麼錯誤。但是因為你是在SQL窗口下運行這些代碼就會出現編譯錯誤,那麼如果你換一個窗口--比如命令窗口(oracle 10g)這樣呢創建觸發器,函數,過程就都不會游編譯錯誤了

⑻ oracle創建的觸發器帶有編譯錯誤

告訴你兩點:
1、當出現警告或者錯誤的時候,使用show error 命令,可以查看錯誤的具體信息,在信息中可以定位錯誤的具體位置。
2、你的問題是:【endif;】不能寫在一起,【end if;】是正確的。
類似的還有【end loop】 等。

---
以上,希望對你有所幫助。

⑼ Oracle存儲過程觸發器用法

1:什麼叫存儲過程?
在oracle中,可以在資料庫中定義子程序,這種程序塊叫存儲過程(procere),它存放在數據字典中,可以在不同用戶和應用程序中共享,並可以實現程序的優化和重用。
2:存儲過程的有點?
過程運行在伺服器端,執行速度快
過程執行一次後代碼就駐留在高速緩存中,在以後的操作中,直接調用緩存數據。
確保資料庫的安全性,可以不授權用戶直接訪問應用程序中的一些表,而是授權用戶執行訪問資料庫的過程。
自動完成需要預先執行的任務,過程可以在系統啟動時自動運行。、
3:存儲過程的創建和執行
用戶存儲過程只能定義在當前資料庫中,可以使用sql語句或OEM創建。
默認情況下,用戶創建的存儲過程歸登錄資料庫的用戶所擁有,DBA可以把許可授權給其他用戶。
Sql命令創建存儲過程
CREATEprocere過程名
【(parameterparameter_modedate_type,….n)】
IS|AS
BEGIN
SQL_STATEMENT
END過程名
其中
Parameter表示過程的參數。
parameter_mode:參數的類型,過程參數和函數參數一樣,有三種類型IN,OUT,INOUT
IN表示參數是輸入給過程的。
OUT表示採納數載過程中被賦值,可以傳給過程的外部。
INOUT表示可以傳內,可以傳外。
調用存儲過程
直接輸入存儲過程的名字可以執行一個已經定義的存儲過程。
存儲過程的編輯修改
修改存儲過程雖然可以和修改視圖一樣,用ALTERprocere,但是他是用來重新編譯和驗證用的,如果要修改過程定義,建議還是用createorreplace。
存儲過程的刪除
當某個過程不再需要的時候,應該將其從內存中刪除,以釋放它佔用的資源。
Dropprocere存儲過程名。
Dropprocereupdate_info.
觸發器
觸發器(trigger)是一些過程,與表聯系緊密,用於保護表中的數據,當一個基表被修改時,觸發器自動就會執行。例如出入其可以實現多個表間數據的一致性和完整性。
一般情況下,對表數據的操作有增刪查改,維護數據的觸發器也可以分為多種,每張基表最多可以建立12個觸發器。
1:Beforeinsert2:beforeinsertfoeachrow;3:afterinert
4:afterinsertforeachrow5:beforeupdate6:beforeupdateforeachrow
7:afterupdate8:afterupdateforeachrow;9:beforedelete;
10:beforedeleteforeachrow11:afterdelete12:afterdeleteforeachrow.
利用sql語句創建觸發器
語法規則
Createorreplacetrigger觸發器名
{before|after|insteadof}
{delete【orinsert】【orupdate】【ofcolumn….n】}
On表名|視圖名
【foreachrow】[]wherecondition]]
Sql_statement[,,,n]
參數說明
Insteadof:指定在創建替代觸發器。
Ofcolumn指定在哪些列上進行觸發。。。
創建觸發器的限制
1:觸發器中有效的語句可以包括DML語句,但是不能包括DDL,rollback,commit
,savepoint都不適用。

⑽ 求一個簡單的oracle 觸發器 寫法

創建兩個表:

createtablea
(stdidint,
stdnamevarchar2(10));

createtableb
(stdidint,
stdnamevarchar2(10));

創建觸發器:

CREATEORREPLACETRIGGERtr_insert
afterinsert
ONa
FOREACHROW
BEGIN
INSERTINTOb(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;

驗證,在a表中插入數據:

insertintoavalues(1,'a');
commit;

驗證b表結果:

閱讀全文

與oracle編譯觸發器的命令相關的資料

熱點內容
安卓手機怎麼把圖標全部下移 瀏覽:183
飢荒被伺服器踢出怎麼進 瀏覽:170
c編譯器哪款好 瀏覽:731
快手寶哥發明什麼app 瀏覽:822
張艷玲編譯 瀏覽:66
android展開收起動畫 瀏覽:237
linuxxz文件 瀏覽:160
在游戲中心裏面怎麼玩到解壓神器 瀏覽:484
電腦發到手機裡面照片怎麼解壓 瀏覽:73
虛擬pdf列印機64位 瀏覽:413
支付寶AES加密和解密 瀏覽:379
編譯實驗原理下載 瀏覽:131
加密防偽溯源系統私人定做 瀏覽:222
掃碼給電動車充電的app叫什麼 瀏覽:760
關閉命令提醒 瀏覽:356
雲賬本app伺服器 瀏覽:499
python輸入數字循環 瀏覽:370
未成年人用什麼app 瀏覽:517
程序員出差多久回家 瀏覽:433
安卓如何更改文件名字 瀏覽:1002