Tablespace创建表时该参数是可选的。
执行CREATE TABLE语句时,如果未定义,Oracle 会分配默认语句。
在默认数据库中有一个“USERS”表空间。如果定义了多个表空间,将分配哪一个?
众所周知(或至少是)您不能在触发器内的变异表上使用 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 版。我已阅读有关复合触发器的信息,但示例并未使用它们。
我们可以在具体模式事件 (ON SCOTT.SCHEMA) 或所有模式 (ON SCHEMA) 上创建数据库触发器。但是,我们也可以在创建数据库触发器时使用 ON DATABASE。它们之间有什么区别?这是一些遗留的东西吗?在使用 AFTER STARTUP 或 AFTER STARTUP 时应该使用 ON DATABASE,因为它肯定只与数据库相关,但使用 ON SCHEMA 完成的相同工作可能会使用 ON DATABASE 完成,那么有什么区别呢?我在 Oracle 文档中找不到关于此的参考。
我们不能在 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。
看起来 Oracle 共享服务器进程模型比专用服务器进程模型更好。在共享服务器配置中,客户端用户进程连接到一个调度程序,它可以同时支持多个客户端连接(源)。此外,共享服务器可以配置为连接池和会话多路复用,因此所有这些都应该带来巨大的性能提升。那么,有了这些优势,是否有任何情况应该使用专用服务器进程模型来代替?
在什么情况下 Oracle 高级排队是实现功能需求的首选机制?例如,从银行账户 A 到银行账户 B 的汇款在理论上可能被认为是两种不同的操作,并且可以分别实现——首先,将来自账户 A 的汇款入队(更新),然后将资金转移到账户 B(更新) . 但是,很明显它不能那样做,因为这两个操作应该在一个一致的操作中完成 - 在事务中。
也许只有在开发执行一些内部(通过执行 DML 操作和调用其他本地存储的 proc/fnc)和外部(通过调用一些 web 服务)的逻辑的存储过程/函数时才应该考虑高级排队。当使用这种对 webservices 的调用时,我们不能把它全部包装成一致的事务,所以唯一的方法是使用一些排队机制......
任何现实生活中的详细示例将不胜感激。
我好奇的不是技术本身的细节,而是使用这种消息传递的真实案例是什么,因为我以前没有这样做过。比如,为什么我需要传递一些数据(消息有效负载)?
是否可以使用触发器监视角色和权限授予/撤销?我知道使用 Oracle 审计工具来做到这一点,但有趣的是可以使用触发器来做到这一点。
您可以创建索引并定义前缀长度,因此索引将仅存储每个列值的第一个起始符号。在 MySQL 中它看起来像这样:
CREATE INDEX table_idx ON emp(last_name(8));
Run Code Online (Sandbox Code Playgroud)
在 Oracle 中是否有其他方法可以做到这一点?