Oracle DB处理数据
Oracle DB处理数据
• 描述各个数据操纵语言(DML) 语句
• 在表中插入行
• 更新表中的行
• 从表中删除行
• 控制事务处理
• 在表中添加新行
– INSERT语句
• 更改表中的数据
– UPDATE语句
• 从表中删除行:
– DELETE语句
– TRUNCATE语句
• 使用COMMIT、ROLLBACK和SAVEPOINT执行数据库事务处理控制
• 读一致性
• SELECT语句中的FOR UPDATE子句
数据操纵语言
• 在进行以下操作时可以执行DML 语句:
– 在表中添加新行
– 修改表中的现有行
– 从表中删除现有行
• 一个事务处理由构成一个逻辑工作单元的一组DML 语句组成。
数据操纵语言(DML) 是SQL 的核心部分。当你要在数据库中添加、更新或删除数据时,就需要执行DML 语句。构成一个逻辑工作单元的一组DML 语句被称为一个事务处理。假定有一个银行数据库。当银行客户从储蓄帐户向支票帐户中划转资金时,该事务处理可能由三个单独的操作组成:减少储蓄帐户金额、增加支票帐户金额以及在事务处理日记帐中记录该事务处理。Oracle Server 必须确保所有这三条SQL 语句都得以执行,才能使帐户得到正确的结算。如果由于某种原因未能执行事务处理中的某条语句,则必须取事务处理的其它语句。
INSERT语句语法
• 使用INSERT语句可在表中添加新行:
• 使用此语法一次只能插入一行。
INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
通过发出INSERT语句可以在表中添加新行。
在该语法中:
table 是表名称
column 是表中要填充的列的名称
value 是该列相应的值
注:这个带有VALUES子句的语句一次只能在表中添加一行。
插入新行
• 插入一个新行,此行的每一列都含有值。
• 按照表中列的默认顺序列出这些值。
• (可选)在INSERT子句中列出这些列。
• 将字符和日期值放在单引号中。
INSERT INTO departments(department_id, department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
由于可以插入的新行上的每一列都含有值,因此不需要在INSERT子句中使用列的列表。但是,如果不使用列的列表,则必须按照表中列的默认顺序列出值,而且必须为每一列都提供一个值。
• 将字符和日期值放在单引号中,但建议不要将数字值放在单引号中。
插入带有空值的行
• 隐式方法:在列的列表中省略该列。
INSERT INTO departments (department_id, department_name) VALUES (30, 'Purchasing');
• 显式方法:在VALUES子句中指定NULL关键字。
INSERT INTO departments VALUES (100, 'Finance', NULL, NULL);
通过使用DESCRIBE命令验证Null状态来确保可以在目标列中使用空值。
Oracle Server 会自动强制实施所有数据类型、数据范围和数据完整性约束条件。对于没有显式列出的所有列,在新行中都包含一个空值。
可以按以下顺序对用户输入过程中可能发生的常见错误进行检查:
• NOT NULL列缺少必需值
• 违反唯一性约束条件或主键约束条件的重复值
• 违反CHECK约束条件的任何值
• 为外键维护的引用完整性约束条件
• 数据类型不匹配或者值太长而无法放入列中
注:建议使用列的列表,因为这样可以增加INSERT语句的可读性和可靠性,也可以减少错误的发生。
插入特殊值
SYSDATE函数用于记录当前日期和时间。
INSERT INTO employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)
VALUES (113, 'Louis', 'Popp', 'LPOPP', '515.124.4567', SYSDATE, 'AC_ACCOUNT', 6900, NULL, 205, 110);
可以使用函数在表中输入特殊值。
示例在EMPLOYEES表中记录了雇员Popp 的信息,其中在HIRE_DATE列中提供的是当前日期和时间。示例中使用SYSDATE函数返回数据库服务器的当前日期和时间。
此外,也可以使用CURRENT_DATE函数获取会话时区的当前日期。在向表中插入行时,也可以使用USER函数。USER函数会记录当前用户名。
确认添加到表的内容
SELECT employee_id, last_name, job_id, hire_date, commission_pct FROM employees WHERE employee_id = 113;
插入特定日期和时间值
• 添加新雇员。
• 确认添加的内容。
INSERT INTO employees
VALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561', TO_DATE('FEB 3, 1999', 'MON DD, YYYY'), 'SA_REP', 11000, 0.2, 100, 60);
通常使用DD-MON-RR 格式插入日期值。使用RR格式时,系统会自动提供正确的世纪。还可以使用DD-MON-YYYY 格式提供日期值。建议使用这种格式,因为这样可以明确地指定世纪,而不必依赖于内部RR格式逻辑来指定正确的世纪。
如果必须以不同于默认格式的格式输入日期,例如输入另一个世纪或特定时间,则必须使用TO_DATE函数。
示例在EMPLOYEES表中记录了雇员Raphealy 的信息,并且将HIRE_DATE列设置为“February 3, 1999”。
创建脚本
• 在SQL 语句中使用&替代来提示用户输入值。
• &是变量值的占位符。
INSERT INTO departments (department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);
可以将含有替代变量的命令保存到文件中,然后在文件中执行该命令。示例在DEPARTMENTS表中记录了一个部门的信息。
运行该脚本文件时,系统会提示您为每个“与(&)”替代变量输入值。为替代变量输入值后,单击“OK(确定)”按钮。输入的值就会被替换到语句中。这样可以反复运行
同一脚本文件,但每次运行该脚本文件时应提供一组不同的值。
从其它表中复制行
• 编写带有子查询的INSERT语句:
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';
• 请勿使用VALUES子句。
• 使INSERT子句中的列数与子查询中的列数匹配。
• 将子查询返回的所有行插入到表sales_reps中。
可以使用INSERT语句在一个表中添加一些行,该表的值来自现有表。在示例中,若要执行INSERT INTO语句,必须首先使用CREATE TABLE语句创建sales_reps
表。可以使用子查询来代替VALUES子句。
语法
INSERT INTO table [ column (, column) ] subquery;
在该语法中:
table 是表名称
column 是表中要填充的列的名称
subquery 是向表中返回行的子查询
INSERT子句中列列表的列数及其数据类型必须与子查询中值的个数及其数据类型相匹配。
根据子查询返回的行数,可能会添加一些行,也可能不添加任何行。要为表中的行创建一个副本,请在子查询中使用SELECT*:
INSERT INTO copy_emp
SELECT * FROM employees;
UPDATE语句语法
• 使用UPDATE语句修改表中的现有值:
• 如果需要,可以一次更新多行。
UPDATE table
SET column= value[, column = value, ...]
[WHERE condition];
可以使用UPDATE语句修改表中的现有值。
在该语法中:
table 是表名称
column 是表中要填充的列的名称
value 是该列相应的值或子查询
condition 标识要更新的行,由列名、表达式、常数、子查询和比较运算符组成
通过查询表来显示更新的行就可以确认更新操作。
注:通常情况下,请使用WHERE子句中的主键列来指定要更新的一行。使用其它列时可
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?