原著作者:Jim Czuprynski
使用联接视图实现复杂的需求
使用一个联接的视图把前面的例子带到更高的层次:允许我们的应用访问多个表的信息。扩展前面的例子: DROP VIEW hr.bv_employees; CREATE OR REPLACE VIEW hr.bv_employees ( empid, fname, lname, email, hire_date, job_id, jobtitle, deptname) AS SELECT e.employee_id, e.first_name, e.last_name, e.email, e.hire_date, e.job_id, j.job_title, d.department_name FROM hr.employees e, hr.jobs j, hr.departments d WHERE e.job_id = j.job_id AND e.department_id = d.department_id / DROP PUBLIC SYNONYM employees; CREATE PUBLIC SYNONYM employees FOR bv_employees; GRANT SELECT, INSERT, UPDATE, DELETE on hr.bv_employees TO oltprole;
记住,当你创建了一个复杂的视图后,ORACLE禁止发出的每句SQL语句中针对基本表的DML操作,哪怕仅针对一个。另外,INSERT语句可以应用在视图中的主键保持表(KEY PRESERVED TABLE)。主键保持表就是它的主键或唯一健在视图返回的结果集中也是唯一的。在本例中,就是Employees表。ALL_UPDATABLE_COLUMNS数据字典显示了哪些是可以被更新的。 SQL> SELECT 2 column_name, 3 updatable, 4 insertable, 5 deletable 6 FROM all_updatable_columns 7 WHERE owner = 'HR' AND table_name = 'BV_EMPLOYEES'; COLUMN_NAME UPD INS DEL ------------------------------ --- --- --- EMPID YES YES YES FNAME YES YES YES LNAME YES YES YES EMAIL YES YES YES HIRE_DATE YES YES YES JOB_ID YES YES YES JOBTITLE NO NO NO DEPTNAME NO NO NO
使用程序包实现功能的包装化和数据存取的标准化
ORACLE程序包的最非凡的功能就是它们的把对数据存取的功能包装成一个数据库对象的能力。我们现在的开发组就是使用程序包的公共属性和方法(包括传统的set 和get这种面向对象的方法)来描述应用程序针对基本视图集的数据库接口需求。 而且,既然程序包的规格定义描述了程序包体的函数和过程的公共接口,那么它就有比传统的存储函数和过程的好处:程序包体可以和程序包分开单独编译。那就意味着,除非签名(函数和存储过程的传入或传出参数和返回参数)发生了变化,否则程序包规格定义是不需要重新编译的。这可以最大限度地降低由于依赖对象而发生的重编译。
[常用软件]评测:Gmail Beta(二) [VB.NET程序]走近VB.Net(二) 再谈函数调用 [VB.NET程序]把握VB.NET中的流(Stream) (二) [Delphi程序]Integer GUID和Comb做主键的效率测试(Delphi+acce… [网页制作]DreamwaverMX与ASP.NET(二) [Web开发]XPDL学习与分享 二 XPDL整体结构 [Web开发]ADO.net学习纪录 (二) [Web开发]Asp.net(vb.net)的Calendar只顯示日,一,二,三...1… [SyBase](转载)深入Linux网络核心堆栈 (二) [ORACLE]ORACLE SQL性能优化系列 (二)
|