讓你的應用程式不再對資料庫的改動“感冒”(二) (轉)

amyz發表於2007-11-10
讓你的應用程式不再對資料庫的改動“感冒”(二) (轉)[@more@]

原著作者:to:jczuprynski@zerodefectcomputing.com">Jim Czuprynski

使用聯接檢視實現複雜的需求:namespace prefix = o ns = "urn:schemas--com::office" />

使用一個聯接的檢視把前面的例子帶到更高的層次:允許我們的應用訪問多個表的資訊。擴充套件前面的例子:

DROP VIEW hr.bv_employees;


CREATE OR REPLACE VIEW hr.bv_employees (


empid,


fname,


lname,


,


hire_date,


job_id,


jobtitle,


deptname)


 AS



  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;


 


記住,當你建立了一個複雜的檢視後,禁止發出的每句語句中針對基本表的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這種物件導向的方法)來描述應用程式針對基本檢視集的資料庫介面需求。

而且,既然程式包的規格定義描述了程式包體的和過程的公共介面,那麼它就有比傳統的函式和過程的好處:程式包體可以和程式包分開單獨編譯。那就意味著,除非簽名(函式和的傳入或傳出引數和返回引數)發生了變化,否則程式包規格定義是不需要重新編譯的。這可以最大限度地降低由於依賴物件而發生的重編譯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章