- 浏览: 453917 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhengch00:
这个文档不是你自己写的吧
informatica连接ftp -
ctcwri:
于我心有慽慽焉,java的web就像陷入了泥坑。
Java 的纯真年代已经离我们越来越远了 -
bestxiaok:
Glorin 写道这个应该是你的安装目录tomcat文件夹下面 ...
Value must be an existing directory配置tomcat问题? -
Glorin:
这个应该是你的安装目录tomcat文件夹下面少了一个temp文 ...
Value must be an existing directory配置tomcat问题? -
bestxiaok:
sheep3600 写道bestxiaok 写道sheep36 ...
AES加密解密
1、触发器。
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)
我为什么要使用触发器?比如,这么两个表:
Create Table Student( --学生表
StudentID int primary key, --学号
....
)
Create Table BorrowRecord( --学生借书记录表
BorrowRecord int identity(1,1), --流水号
StudentID int , --学号
BorrowDate datetime, --借出时间
ReturnDAte Datetime, --归还时间
...
)
用到的功能有:
1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
等等。
这时候可以用到触发器。对于1,创建一个Update触发器:
Create Trigger truStudent
On Student
for Update
As
if Update(StudentID)
begin
Update BorrowRecord
Set br.StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID
end
理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。
对于2,创建一个Delete触发器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。
这里我们只讲解最简单的触发器。复杂的容后说明。
事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代。
2.游标
在SQL 2000之前,游标可谓是SQL Server心中的痛: 老牛般的速度(CPU),河马般的胃口(内存)。可你却不能不用他。
什么叫游标呢?说白了就是像高级语言一样,是存放数据集,并逐条访问的一种机制。
在SQL Server 并没有很好的数据逐条访问机制,如果有,那就是游标。
还是举例子:
对于表
Create Table BorrowRecord( --学生借书记录表
BorrowRecord int identity(1,1), --流水号
StudentID int , --学号
StudentFeeID int , --费用结算号 (外键)
BorrowDate datetime, --借出时间
ReturnDAte Datetime, --归还时间
Fee Money --借书费用
...
)
Create Table StudentFee( --学生费用结算表
StudentFeeID int primarykey , --费用结算号 (主键)
StudentID int , --学号
BorrowBookAllFee Money, --所有借书总费用
...
)
两者关系为多对一的关系,关联字段为StudentFeeID
由于某种原因StudentFee表的数据遭到了破坏,我想StudentFee循环一遍将“所有借书总费用”重算 。
-----------------------------------------------------------------------
-------------------------------------------------------
--Name:一部分代码
--func:更新学生借书总费用
--Use :
--User:
--Author: 懒虫 # SapphireStudio (www.chair3.com)
--Date : 2003-4-16
--Memo : 临时写写的,给大家作个Sample。没有调试阿。
-------------------------------------------------------
--声明一个游标
Declare curStudentFee Cursor
for
Select StudentFeeID From StudentFee
--声明两个费用变量
Declare @mBorrowBookAllFee Money --总费用
Declare @iStudentFeeID Int --借书结算号
--初始化
Set @mBorrowBookAllFee=0
Set @iStudentFeeID=0
--打开游标
Open curStudentFee
--循环并提取记录
Fetch Next From curStudentFee Into @iStudentFeeID
While ( @@Fetch_Status=0 )
begin
--从借书记录中计算某一学生的借书总记录的总费用
Select @mBorrowBookAllFee=Sum(BorrowBookAllFee)
From BorrowRecord
Where StudentFeeID=@iStudentFeeID
--更新到汇总表。
Update StudentFee Set BorrowBookAllFee=@mBorrowBookAllFee
Where StudentFeeID=@iStudnetFeeID
Fetch Next From curStudentFee Into @mFee
end
--关闭游标
Close curStudentFee
--释放游标
Deallocate curStudentFee
-----------------------------------------------------------------------
关注游标的要点:1、声明、打开、关闭、释放 ; 2、@@Fetch_Status 游标提取状态标志,0表示正确
这里,我也要提到,我不鼓励使用游标。更多的情况下,在SQL 2000 里面 ,函数已经能够实现绝大部分游标的功能
发表评论
-
JAVA 程序中使用ORACLE 绑定变量( bind variable )
2012-08-17 10:45 28901、为什么要使用绑定变量 (1)SQL语 句硬分 ... -
oracle加 行锁
2012-06-13 13:19 1660加锁是为了防止一些操作而进行的,比如说共享锁,可以防止 ... -
update多列更新
2012-04-05 16:06 1955再ETL的时候,经常会遇到列转换的问题,再对照转换中出现多列更 ... -
oracle数据库间数据快速 复制
2012-03-26 15:59 1994一种利用dblink模式: 1 Create public ... -
Can't open a connection to site 'SYB_BACKUP' 解决办法
2012-02-08 10:56 2064把可能遇到的情况总结一下: 1、出错该错误可以先检查一下Syb ... -
数据库知识:Oracle服务的知识详解
2012-01-06 14:40 1158Oracle数据库的操作中, ... -
UNION替换OR效率测试及总结
2011-11-09 17:11 1120大家在做SQL优化的过程中,可能都知道一个事实:某些情况下使用 ... -
update 多表更新
2011-11-09 15:35 1020在开发中,数据库来回换,而有些关键性的语法又各不相同,这是一件 ... -
ora-00957:duplicate column name
2011-11-07 16:49 2434ora-00957:duplicate column name ... -
Oracle: ORA-01000: 超出打开游标的最大数问题
2011-11-02 09:53 1788java.sql.SQLException: ORA-0100 ... -
几种常用的数据库分页
2011-11-01 22:33 12151.oracle数据库分页 select * from (se ... -
查看当前数据库全表扫描的SQL
2011-07-22 16:07 2120在大数据操作表的时候经常会遇到查询慢的问题,有的时候的确是数据 ... -
oracle flashback闪回技术
2011-07-21 16:13 951今天在操作数据库的时候,由于登陆的时候没有认真看数据库名,导致 ... -
oracle flashback闪回技术
2011-07-21 16:13 926今天在操作数据库的时候,由于登陆的时候没有认真看数据库名,导致 ... -
oracle临时表空间
2011-07-20 15:57 1127以下是在学习中学到的一些关于临时表空间的语句: --1、查看临 ... -
导入导出csv文件(PL/SQL Developer)
2011-07-13 19:13 2038在运用与数据库有关的操作时,总是会与数据的导入导出打交道。因此 ... -
SQL查询原理及执行顺序
2011-07-06 16:00 6490一、sql语句的执行步骤: 1)语法分析,分析语句的语法是否符 ... -
oracle基本结构
2011-06-29 19:59 1017Oracle服务器=Oracle实例+数据库(物理组件) a ... -
Oracle dba和sysdba的区别
2011-05-18 16:42 1046之前老是把dba和sysdba混为一体,今天看到论坛在讨论两者 ... -
oracle字符串转换
2011-05-04 20:03 1534今天看代码,看到不少代码显示的时候拼接字符串用的是substr ...
相关推荐
通过学习这些例子,你将能够更好地理解和应用Oracle中的函数、游标和触发器。实践是掌握这些概念的关键,所以尝试运行这些脚本,观察它们如何影响数据库,并根据需要调整它们以满足自己的需求。在学习过程中,你可能...
在上述例子中,定义了一个名为`cur_age`的游标,用于从`t_borrowRecord`表中选取特定学生的所有借书日期(borrowDate)。通过游标,我们可以获取每一条记录并根据需要进行操作,比如更新归还日期(returnDAte)。 ...
个人对游标与触发器的了解做的一个简易课件,希望对大家有所帮助
本示例展示了一个名为`tri_addfriends`的触发器,该触发器在`jiveUser`表上被触发,并且仅在进行插入操作时生效。下面是触发器的具体实现细节: #### 三、触发器定义 ```sql CREATE TRIGGER tri_addfriends ON ...
第一个例子是遍历SC表,找出所有及格的选课信息,通过声明变量并定义游标,然后打开、获取数据,使用while循环判断状态,如果成绩大于等于60则输出信息。第二个例子则是展示如何通过游标获取SPJ表中的偶数行,这里...
这只是一个基础示例,实际存储过程可以包含更复杂的逻辑和条件判断。 2. **触发器**: 触发器是一种数据库对象,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行。在Navicat中,可以通过设计表的...
以下是如何使用游标的一个例子: ```sql DECLARE cursor_example CURSOR FOR SELECT id, name, salary FROM employees WHERE department_id = 100; emp_record employee_management.employee_rec; BEGIN OPEN ...
接着,定义了一个名为`bCursor`的游标,该游标执行的SQL语句为从表`test1`中选择`a`和`b`两列的值。通过`OPEN`语句打开游标后,使用`FETCH NEXT`从游标中获取下一行数据,并将这些数据存储到`@a`和`@b`变量中。 接...
3. **游标**:游标是数据库中的一个重要概念,它允许我们在结果集上进行迭代,一次处理一行数据。在PL/SQL中,游标用于动态地处理查询结果。游标可以用于循环遍历查询结果,执行基于每行数据的操作。实例脚本可能...
查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和触发器操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应...
在这个例子中,当尝试在`my_table`上插入新记录且`column_value`为NULL时,触发器会抛出一个自定义错误,阻止插入操作。 接下来,我们讨论存储过程。存储过程是一组SQL和PL/SQL语句的集合,预先编译并存储在数据库...
虽然例子中没有提及触发器,但在实际应用中,例如,我们可能会创建一个触发器,在学生分数更新时自动更新其平均分,或者在插入新记录时检查输入的有效性。 总结起来,存储过程和触发器是数据库系统中强大的工具,...
在这个实例中,我们看到的是一个防止非本地机器执行DDL(Data Definition Language)操作的触发器,比如`TRUNCATE`、`ALTER`或`DROP`等。这个触发器主要目的是为了系统安全和审计目的。 首先,为了创建这个触发器,...
这个文件夹里包含了一些本人收集的plsql里的小例子,比如for循环,IF判断等流程控制,程序包,触发器,游标,数组,异常处理,过程与函数。当你忘记它们的格式时可以翻出来看一看,例子简单易读,很适合初学者。
根据提供的代码示例,我们可以看到一个具体的触发器实现。 #### 代码解析 在给出的代码中,定义了一个名为`TRIG_teacher`的触发器,该触发器在`T_Teacher`表上执行。此触发器响应三种类型的事件:插入(`INSERT`)、...
该触发器定义了在`s_c`表上进行删除操作前的逻辑,即当有记录被删除时,将该记录插入到另一个表`s_c1`中。 #### 四、视图的创建与维护 视图是基于表或其他视图的一种虚拟表,它可以简化数据查询、保护敏感数据等。...
1. **声明游标**:首先需要声明一个游标,指定其名称和关联的SELECT语句。例如: ```sql declare curStudent cursor scroll for select Sno, Sname, Ssex from Student ``` 在这个例子中,`curStudent`是游标名...
详细讲解了PLSQL的基本语法,以及储存过程、函数、触发器、游标和包。文档中还包括例子和练习。
在这里,我们创建了一个名为 `TestPackage` 的包,包含一个游标类型 `mycursor` 和一个返回游标的 `GetRecords` 过程。 ```sql create or replace package TestPackage is type mycursor is ref cursor; ...