小编Cen*_*ion的帖子

创建表时如何确定默认表空间?

Tablespace创建表时该参数是可选的。

执行CREATE TABLE语句时,如果未定义,Oracle 会分配默认语句。

在默认数据库中有一个“USERS”表空间。如果定义了多个表空间,将分配哪一个?

oracle

27
推荐指数
2
解决办法
18万
查看次数

为什么我没有在触发器中收到变异表错误?

众所周知(或至少是)您不能在触发器内的变异表上使用 DML 语句。Oracle 文档的摘录:

变异表是由 UPDATE、DELETE 或 INSERT 语句修改的表,或者可能受 DELETE CASCADE 约束影响更新的表。

发出触发语句的会话不能查询或修改变异表。此限制可防止触发器看到一组不一致的数据。

但是,当我执行insert into empusing SQL Developer 或 SQL*Plus时,我不明白为什么这个演示触发器不会因“变异表”错误而失败:

CREATE OR REPLACE TRIGGER emp_bri   
  BEFORE INSERT ON emp 
    FOR EACH ROW
BEGIN

  SELECT max(id) + 1 INTO :NEW.id FROM emp;
  UPDATE emp SET salary = 5000;

END emp_bri;
Run Code Online (Sandbox Code Playgroud)

插入成功完成下一个id值并更新所有emp记录。我使用的是 Oracle 数据库 11g 企业版 11.2.0.1.0 版。我已阅读有关复合触发器的信息,但示例并未使用它们。

trigger oracle oracle-11g

11
推荐指数
1
解决办法
6350
查看次数

ON SCHEMA 和 ON DATABASE 触发器之间有什么区别?

我们可以在具体模式事件 (ON SCOTT.SCHEMA) 或所有模式 (ON SCHEMA) 上创建数据库触发器。但是,我们也可以在创建数据库触发器时使用 ON DATABASE。它们之间有什么区别?这是一些遗留的东西吗?在使用 AFTER STARTUP 或 AFTER STARTUP 时应该使用 ON DATABASE,因为它肯定只与数据库相关,但使用 ON SCHEMA 完成的相同工作可能会使用 ON DATABASE 完成,那么有什么区别呢?我在 Oracle 文档中找不到关于此的参考。

trigger oracle

8
推荐指数
1
解决办法
1万
查看次数

为什么我不需要在数据库触发器中提交?

我们不能在 DML 触发器中 COMMIT/ROLLBACK,因为事务是在 DML 语句之后手动处理的。然而,数据库触发器似乎是一个例外。例如,假设有一个数据库触发器:

CREATE OR REPLACE TRIGGER user_login_as
  AFTER LOGON 
    ON SCHEMA
BEGIN
  INSERT INTO user_login_log(username, log_date, action) VALUES (user, sysdate, 'User has logged in');
END user_login_as;
Run Code Online (Sandbox Code Playgroud)

触发器不包含内部提交的自治事务过程,那么谁在提交插入?这个触发器就像一个魅力,在用户登录后将新记录插入到日志表中。它闻起来像隐藏的 Oracle 功能,我在 Oracle 文档中找不到任何关于此的参考。我正在使用 Oracle11g。

trigger oracle

7
推荐指数
1
解决办法
5万
查看次数

什么时候应该使用专用服务器进程模型而不是共享进程模型?

看起来 Oracle 共享服务器进程模型比专用服务器进程模型更好。在共享服务器配置中,客户端用户进程连接到一个调度程序,它可以同时支持多个客户端连接(源)。此外,共享服务器可以配置为连接池和会话多路复用,因此所有这些都应该带来巨大的性能提升。那么,有了这些优势,是否有任何情况应该使用专用服务器进程模型来代替?

oracle

5
推荐指数
1
解决办法
4162
查看次数

使用 Oracle 高级排队的实际案例有哪些?

在什么情况下 Oracle 高级排队是实现功能需求的首选机制?例如,从银行账户 A 到银行账户 B 的汇款在理论上可能被认为是两种不同的操作,并且可以分别实现——首先,将来自账户 A 的汇款入队(更新),然后将资金转移到账户 B(更新) . 但是,很明显它不能那样做,因为这两个操作应该在一个一致的操作中完成 - 在事务中。

也许只有在开发执行一些内部(通过执行 DML 操作和调用其他本地存储的 proc/fnc)和外部(通过调用一些 web 服务)的逻辑的存储过程/函数时才应该考虑高级排队。当使用这种对 webservices 的调用时,我们不能把它全部包装成一致的事务,所以唯一的方法是使用一些排队机制......

任何现实生活中的详细示例将不胜感激。

我好奇的不是技术本身的细节,而是使用这种消息传递的真实案例是什么,因为我以前没有这样做过。比如,为什么我需要传递一些数据(消息有效负载)?

oracle

4
推荐指数
1
解决办法
3万
查看次数

是否可以使用触发器监视角色和权限授予/撤销?

是否可以使用触发器监视角色和权限授予/撤销?我知道使用 Oracle 审计工具来做到这一点,但有趣的是可以使用触发器来做到这一点。

trigger oracle audit

2
推荐指数
1
解决办法
5029
查看次数

Oracle 中前缀索引的替代方案是什么?

您可以创建索引并定义前缀长度,因此索引将仅存储每个列值的第一个起始符号。在 MySQL 中它看起来像这样:

CREATE INDEX table_idx ON emp(last_name(8));
Run Code Online (Sandbox Code Playgroud)

在 Oracle 中是否有其他方法可以做到这一点?

index oracle feature-comparison

1
推荐指数
1
解决办法
577
查看次数

标签 统计

oracle ×8

trigger ×4

audit ×1

feature-comparison ×1

index ×1

oracle-11g ×1