? ? ? ?
复杂视图可以基于任何SELECT语句,不管多么复杂
视图是模式对象。要在另一个模式中使用视图,必须用模式名限定视图名 可以像查询表一样查询视图
可以将视图联接到其它视图或者联接到表,它们可以被聚合,在有些情况下它们可以接受DML语句。
? 视图仅作为数据字典结构存在。每当查询视图时,必须运行底层的SELECT语句。
同义词
? 同义词是视图或表的另一个名称 ? 私有同义词是模式对象,公有同义词存在于用户模式之外,不需要指定模式名作为限定
符就可以使用。
? 同义词与视图和表共享相同的名称空间,因此可以与它们交互使用。 序列
? 序列生成唯一值——除非指定了MAXVALUE或MINVALUE和CYCLE ? 递增序列不需要提交,不能被回滚
? 任何会话都能通过读取它的下一个值来递增序列。可以获得上次发送给会话的值,但不
能获得上次发出的值。
第八章 DML与并发性
本章学习内容
? ? ? ? ? ? ? ? ? ? ?
描述各种数据操作语言(Data Manipulation Language, DML)语句 在表中插入行 更新表中的行 从表中删除行 控制事务
使用DML管理数据
识别和管理PL/SQL对象 监视和解决锁定冲突 解释撤销的作用
了解事务的撤销生成方式 管理撤销
练习8-1 使用INSERT命令
在这个练习中,我们将使用各种方法在表中插入行
(1) 使用SQL Developer或者SQL*Plus,连接到WEBSTORE模式
(2) 查询PRODUCTS、ORDERS、和ORDER_ITEMS表,确认当前存储了哪些数据
SELECT * FROM products; SELECT * FROM orders; SELECT * FROM order_items; (3) 向PRODUCTS表中插入两行,并依次提供值
INSERT INTO PRODUCTS VALUES (PROD_SEQ.NEXTVAL, '11G SQL EXAM Guide', 'ACTIVE', 60, SYSDATE, 20); INSERT INTO PRODUCTS VALUES (PROD_SEQ.NEXTVAL, '11G ALL-in-One Guide', 'ACTIVE', 100, SYSDATE, 40); (4) 向ORDERS表中插入两行,并显示提供列名 INSERT INTO orders (order_id, order_date, order_status, order_amount, customer_id) VALUES (order_seq.nextval, SYSDATE, 'COMPLETE', 3, 2); INSERT INTO orders (order_id, order_date, order_status, order_amount, customer_id) VALUES (order_seq.nextval, SYSDATE, 'PENDING', 5, 3);
(5) 向ORDER_ITEMS表中插入三行,使用替代变量:
INSERT INTO order_items VALUES (&item_id, &order_id, &product_id, &quantity); 当系统提示时,提供值{1,1,2,5}、{2,1,1,3}、{1,2,2,4}
(6) 向PRODUCTS表中插入一行,计算PRODUCT_ID使它比当前的最大值还高100.
这需要使用一个标量子查询: INSERT INTO PRODUCTS VALUES ((SELECT MAX(PRODUCT_ID) + 100 FROM PRODUCTS), '11G DBA2 Exam Guide', 'INACTIVE', 40, SYSDATE - 365, 0); (7) 确认插入的行 SELECT * FROM products; SELECT * FROM orders; SELECT * FROM order_items;
(8) 提交插入: COMMIT; 练习8-2 使用UPDATE命令
在这个练习中,我们将使用各种方法更新表中的行。假设WEBSTORE.PRODUCTS表与【练习8-1】中图一样。
(1) 使用SQL Developer 或者SQL*Plus,连接到WEBSTORE模式 (2) 更新由主键确定的一行
UPDATE products SET product_description = 'DBA1 Exam Guide' WHERE product_id = 102; 这条语句应该返回消息“1 row updated”
(3) 使用不相等谓词并提供值,更新一组行 UPDATE products
SET product_id = (1 + (SELECT MAX(product_id) FROM products WHERE product_id <> 102)) WHERE product_id = 102; 这条语句返回消息“1 row updated” (4) 确认行的状态
SELECT * FROM products; (5) 提交所作的变更: COMMIT; 练习8-3 使用DELETE命令
在这个练习中,我们将使用各种方法删除表中的行。
(1) 使用SQL Developer 或者SQL*Plus,连接到WEBSTORE模式 (2) 在主键上使用相等谓词来删除一行 DELETE FROM products WHERE product_id = 3; (3) 尝试通过省略WHERE子句来删除表中所有行 DELETE FROM products; ORA-02292: integrity constraint (OCP11G.FK_PRODUCT_ID) violated - child record found 这条语句会失败,因为它违反约束,ORDER_ITEMS表中有子记录通过外键FK_PRODUCT_ID引用PRODUCTS表中的PRODUCT_ID值。 (4) 提交删除 COMMIT; 练习8-4 使用DML管理数据
本练习将示范事务隔离和控制。使用两个SQL*Plus会话(也可以使用SQL Developer),都以用户SYSTEM的身份连接。按正确顺序运行两个会话在表中的命令。 步骤 1 2 3 4 第一个会话 CREATE TABLE t1 AS SELECT * FROM all_users; SELECT COUNT(*) FROM t1; DELETE FROM t1; SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1; 第二个会话 两个会话的结果相同 SELECT COUNT(*) FROM t1; 两个会话的结果不同,因为事务隔离隐藏了变更 ROLLBACK; 5 6 7 8 9 SELECT COUNT(*) FROM t1; DELETE FROM t1; SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1; 两个会话的结果相同 SELECT COUNT(*) FROM t1; CREATE VIEW v1 AS SELECT * FROM t1;
10 11 12 13 14 SELECT COUNT(*) FROM t1; ROLLBACK; SELECT COUNT(*) FROM t1; DROP VIEW v1; DROP TABLE t1; SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1; DDL语句提交DELETE,因此它不能回滚 练习8-5 创建PL/SQL对象
本练习使用Database Control创建PL/SQL 对象,并且在SQL*Plus中执行这些对象。 (1) 使用SQL*Plus,以用户SYSTEM的身份连接数据库 (2) 创建一个本练习将要使用的表 CREATE TABLE integers(c1 NUMBER, c2 VARCHAR2(5)); (3) 使用Database Control,以用户SYSTEM的身份连接数据库。
(4) 在数据库的主页上选中Schema选项卡,单击Programs部分的Packages链接,然后
单击Create按钮。
(5) 在Create Package窗口中,输入程序包的名称NUMBERS以及用于该程序包的源代
码。单击OK创建这个程序包。
CREATE OR REPLACE PACKAGE numbers IS FUNCTION odd_even(v1 NUMBER) RETURN VARCHAR2; PROCEDURE ins_ints(v1 IN NUMBER); END numbers; (6) 在数据库的主页上选中Schema选项卡,单击Programs部分的Packages Bodies链接,
然后单击Create按钮。
(7) 在Create Package Body窗口中,输入程序包的名称NUMBERS以及用于该程序包主
体的源代码。单击OK按钮创建这个程序包主体。 CREATE OR REPLACE PACKAGE BODY numbers IS FUNCTION odd_even(v1 NUMBER) RETURN VARCHAR2 AS BEGIN IF MOD(v1, 2) = 0 THEN RETURN 'even'; ELSE RETURN 'odd'; END IF; END odd_even; PROCEDURE ins_ints(v1 IN NUMBER) AS BEGIN FOR i IN 1 .. v1 LOOP INSERT INTO integers VALUES (i, odd_even(i)); END LOOP; END ins_ints; END numbers; (8) 在SQL*Plus会话中描述这个程序包,执行该过程并检查结果
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库OCP认证考试指南全册Oracle Database 11g练习与知识点 - 图文(10)在线全文阅读。
相关推荐: