1. PL/SQL 中的游标:
游标基本上可以称为指向上下文区域的指针。上下文区域是Oracle 在处理SQL 语句时创建的内存区域。因此,游标负责保存SQL 语句返回的行。因此,PL/SQL 在游标的帮助下控制上下文区域。活动集基本上是游标持有的行集。游标可以有两种类型:隐式游标和显式游标。
光标的优点:
- 它们有助于执行逐行处理以及每行的逐行验证。
- 使用游标可以实现更好的并发控制。
- 游标比 while 循环更快。
光标的缺点:
- 他们每次使用更多的资源,因此可能会导致网络往返。
- 更多的网络往返次数会降低性能并降低速度。
2. PL/SQL 中的触发器:
触发器基本上是一个程序,它响应某些事件(例如数据库中的修改)而自动执行。它们执行的一些事件是 DDL 语句、DML 语句或任何数据库操作。触发器因此存储在数据库中并进入特定条件匹配时的操作。因此,它们可以定义在任何模式、表、视图等上。有六种类型的触发器:BEFORE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE、BEFORE DELETE 和 AFTER DELETE。
触发器的优点:
- 它们有助于跟踪数据库中的所有更改。
- 它们还有助于维护完整性约束。
触发器的缺点:
- 它们很难查看,这使得调试也很困难。
- 过多地使用触发器或在触发器中编写复杂的代码会降低性能。
光标和触发器的区别:
S.NO | Cursor | Trigger | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1. | It is a pointer which is used to control the context area and also to go through the records in the database. | It is a program which gets executed in response to occurrence of some events. | ||||||||||||
2. | A cursor can be created within a trigger by writing the declare statement inside the trigger. | A trigger cannot be created within a cursor. | 3. | It gets created in response to execution of SQL statement thus it is not previously stored. | It is a previously stored program. | 4. | The main function of the cursor is retrieval of rows from the result set one at a time (row by row). | The main function of trigger is to maintain the integrity of the database. | 5. | A cursor is activated and thus created in response to any SQL statement. | A trigger is executed in response to a DDL statement, DML statement or any database operation. | 6. | The main disadvantage of cursor is that it uses more resources each time and thus results in network round trip. | The main disadvantage of trigger is that they are hard to view which makes the debugging really difficult. |