Ⅰ 求做資料庫觸發器設計題
createorreplacetriggertri_cj
afterinsertonXSCJ
foreachrow
begin
if:new.cj>=60then
Dbms_output.put_line('成績合格,已完成插入操作');
else
Dbms_output.put_line('成績不合格,不能計入成績');
endif;
end;
編譯完成後,執行下圖的插入語句:
註:把代碼中的cj換成XSCJ表中對應的成績欄位。
Ⅱ sql 觸發器的題目
什麼資料庫的觸發器啊?
--補充
create table users(
id int,
status char(1)
)
觸發器
create or replace trigger trig_users
before insert on users
for each row
begin
if :new.status = '1' then
:new.status := 'a';
elsif :new.status = '2' then
:new.status := 'b';
end if;
end;
測試
SQL> insert into users
2 select 1,'1' from al union
3 select 2,'2' from al union
4 select 3,'1' from al union
5 select 4,'2' from al
6 ;
4 rows inserted
SQL> select * from users
2 ;
ID STATUS
--------------------------------------- ------
1 a
2 b
3 a
4 b
SQL>
Ⅲ 資料庫觸發器問題
---------------------創建資料庫表-------------------------
if exists(select * from sysobjects where name='P')
drop table P
go
use Test
go
create table P
(
PNo char(2), --零件編號
PName varchar(15), --零件名稱
Color char(2), --零件顏色
Weight int --零件重量
)
---------------------創建觸發器-----------------------
if exists(select * from sys.triggers where name ='test_trigger')
drop trigger test_trigger
go
create trigger test_trigger
on P
for insert
as
begin tran
declare @pno char(2)
declare @pname varchar(15)
declare @color char(2)
declare @weight int
declare @errorsum int = 0
select @pno=PNo,@pname=PName,@color=Color,@weight=Weight from inserted
if exists(select * from sysobjects where name='Test_Table')
begin
insert into Test_Table values(@pno,@pname,@color,@weight)
set @errorsum+=@@error
end
else
begin
select * into Test_Table from inserted
set @errorsum+=@@error
end
if(@errorsum<>0)
begin
rollback tran
end
else
commit tran
go
--看看這個能不能解決問題,我自己寫的
Ⅳ 資料庫的一道觸發器題目,想請大佬幫看下有沒有錯的地方。
試卷寄到學校,會由一些不想關的人把答題紙拿出來,然後封上名字變成一本一本的答題紙。然後幾個老師判答題紙,她們看不到卷子,看到你試卷的人是無關的人
Ⅳ 資料庫問題之觸發器
instead of 執行前觸發器,一般叫替代觸發器
在用戶執行數據操作數據之前,觸發器觸發,執行觸發器代碼,不執行用戶的操作
根據這個特性,
1>instead of 觸發器可以為視圖添加數據操作的功能
如:
表:
表1(ID,NAME) 表2(ID,DATE)
視圖 :
DATA(表1.ID,表1.NAME,表2.DATE)
為DATA視圖添加insert操作:代碼如下
create triger trgName
on DATA
instead of insert
as
begin
insert into 表1 select ID,NAME from inserted
insert into 表2 select ID,DATE from inserted
end
2>可以根據情況進行數據操縱(insert的作用)
如:我們需要只有5月份才可以操縱數據,其他月份都禁止操縱
使用instead of觸發器可以避免,插入了數據又刪除的,無效勞動,浪費不必要的系統資源
3>可以根據條件判斷數據的合法性,在執行或否決執行(update的作用),沒有必要執行之後再進行回滾
4>可以防止表中數據,或一定條件的數據被刪除(delete的作用),沒有必要刪除了在重新寫入表
總的來說,我用一張簡單的圖來說明下,如:
(A用戶的DML操縱,B為實際的DML操縱,C為觸發器及其代碼)
圖1:for after 觸發器
A↓
B↓
C↓
結束
圖2:instead of觸發器
A↓
C↓
結束
所以instead of觸發器必須要進行實質的DML操縱
Ⅵ SQL觸發器問題(資料庫)
create table s(sno number(10,0) primary key,sname varchar2(10),birthday date,age number(3,0),sex varchar2(2));
create table c(cno number(10,0) primary key,cname varhcar2(10),credit number(20,2),teacher varchar2(10));
create table sc(sno number(10,0) references s(sno),cno number(10,0) references c(cno),grade number(5,2),seldate date);
create trigger tri_sc
before insert or update on sc
for each row
declare
exc1,exc2 exception;
temp_count1,temp_count2 number;
begin
select count(*) into temp_count1 from sc where :new.sno=sc.sno group by sno;
select count(*) into temp_count2 from sc where :new.cno=sc.cno group by cno;
if temp_count1 >=5 then
raise exc1;
end if;
if temp_count2 >=3 then
raise exc2;
end if;
exception
when exc1 then
dbms_output.put_line('最多隻能選修5門課程'); --異常處理這部分你可以自己決定咯
when exc2 then
dbms.output.put_line('選修本門課程人數已滿');
end;
create trigger tri_s
before update on s
for each row
declare
exc exception;
begin
if :new.age < :old.age then
raise exc;
end if;
exception
when exc then
dbms_output.put_line('年齡只能增加');
end;
Ⅶ sql資料庫選擇題,在應用中使用sql,觸發器,存儲過程
1)查看錶中的觸發器類型:
sp_helptrigger:返回對當前資料庫的指定表定義的 DML 觸發器的類型。sp_helptrigger 不能用於 DDL 觸發器。
示例: EXEC sp_helptrigger '表名'
2)查看觸發器的有關信息:
sp_help:報告有關資料庫對象(sys.sysobjects 兼容視圖中列出的所有對象)、用戶定義數據類型或某種數據類型的信息。
示例: EXEC sp_help '觸發器名'
3)顯示觸發器的定義:
sp_helptext:顯示規則、默認值、未加密的存儲過程、用戶定義函數、觸發器或視圖的文本。
示例: EXEC sp_helptext '觸發器名'
4)查看當前庫中所有的觸發器:
查詢腳本:SELECT * FROM Sysobjects WHERE xtype = 'TR'
5)查看當前庫中所有的觸發器和與之相對應的表:
查詢腳本:SELECT tb2.name AS tableName,tb1.name AS triggerName FROM Sysobjects tb1 JOIN Sysobjects tb2 ON tb1.parent_obj=tb2.id WHERE tb1.type='TR'
Ⅷ 關於資料庫觸發器的問題
1. 利用課本上介紹的幾種方法對資料庫的完整性進行定義和檢驗,掌握Constraint,Check等短句的用法;
2. 在SQL Server或者MySQL中練習觸發器的使用;
a) 在northwind資料庫中建立2個表,cust和order,表定義如下:
表cust
列名 類型及長度 其它
CustomerID char(5) 主鍵
Custcity Char(24)
Custname Char(64) 非空
CStatus int 客戶狀態
Cstorage int 庫存量
Cdate Date 日期
表order:
列名 類型及長度 其它
Orderid char(5) 主鍵
OrderNames Char(24) 非空
OStatus int 狀態
Orders int 定購量
Odate Date 日期
b) 要求根據以上表完成以下作業:
① 在cust表中建立刪除觸發器,實現上述2表的級聯刪除。
② 在order表建立insert觸發器,當向order表插入一行,如果cust表中對應記錄status值為1,說明處於准備狀態不能寫入該數據;
③ 在order表上建立一個插入觸發器,在添加一個訂單時,減少cust表的相應貨物的記錄的庫存量。
④ 在order表上建立一個插入觸發器,規定訂單日期(Odate)不能手工修改。
⑤ 要求訂購的物品一定要在倉庫中有的,並且數量足夠。
⑥ 在order表上建立一個插入觸發器,同時插入多行數據時,要求訂購的物品一定要在倉庫中有的。
⑦ 查看觸發器情況:
1. sp_helptrigger 觸發器名
2. sp_helptext 觸發器名
3. 設置某一觸發器的無效和重新有效
4. 刪除觸發器 YES
Ⅸ 計算機組成原理復習題 中斷介面中有哪些標志觸發器功能是什麼
中斷介面中有四個標志觸發器:
(1) 准備就緒的標志(RD):一旦設備做好一次數據的接受或發送,便發出一個設備動作完畢信號,使RD標志置「1」。在中斷方式中,該標志用作為中斷源觸發器,簡稱中斷觸發器。
(2) 允許中斷觸發器(EI):可以用程序指令來置位。EI為「1」時,某設備可以向CPU發出中斷請求;EI為「0」時,不能向CPU發出中斷請求,這意味著某中斷源的中斷請求被禁止。設置EI標志的目的,就是通過軟體來控制是否允許某設備發出中斷請求。
(3) 中斷請求觸發器(IR):它暫存中斷請求線上由設備發出的中斷請求信號。當IR標志為「1」時,表示設備發出了中斷請求。
(4) 中斷屏蔽觸發器(IM):是CPU是否受理中斷或批准中斷的標志。IM標志為「0」時,CPU可以受理外界的中斷請求,反之,IM標志為「1」時,CPU不受理外界的中斷。