RESTRICT_REFERENCES的意思
RESTRICT_REFERENCES,這個PRAGMA比較複雜,從字面上也看不到什麼。[@more@] 總的來說,它是一個程式輔助檢驗碼,檢查子程式的純度(PURITY),幫助檢驗子程式是否有違反規則的地方。一般用在函式上,但當函式呼叫過程時,也要作相應的設定檢查。這是為了避免當在DML語句上呼叫函式時正常執行不至於產生錯誤。
語法,PRAGMA RESTRICT_REFERENCES(function_name | default , )RNDS, WNDS, RNPS, WNPS) | , TRUST);
RNDS,WNDS,RNPS,WNPS可以同時指定。但當TRUST指定是,其它的被忽略。
DEFAUT是指作用在該程式包上的所有子程式,函式。
RNDS(Read No Database State),規定子程式不能讀取任何的資料庫狀態資訊。(即不會查詢資料庫的任何表,包括DUAL虛表)
RNPS(Read No Package State),規定子程式不能讀取任何程式包的狀態資訊,如變數等。
WNDS(Write No Database State),規定子程式不能向資料庫寫入任何資訊。(即不能修改資料庫表)
WNPS(Write No Package State),規定子程式不能向程式包寫入任何資訊。(即不能修改程式包變數的值)
TRUST,指出子程式是可以相信的不會違反一個或多個規則。這個選項是需要的當用C或JAVA寫的函式透過PL/SQL呼叫時,因為PL/SQL在執行是對它們不能檢查。
這個編譯指令只能在程式包及物件型別說明部分指定。
以下是個例子,在編譯程式包體時報錯,它違反了RNDS規則。
語法,PRAGMA RESTRICT_REFERENCES(function_name | default , )RNDS, WNDS, RNPS, WNPS) | , TRUST);
RNDS,WNDS,RNPS,WNPS可以同時指定。但當TRUST指定是,其它的被忽略。
DEFAUT是指作用在該程式包上的所有子程式,函式。
RNDS(Read No Database State),規定子程式不能讀取任何的資料庫狀態資訊。(即不會查詢資料庫的任何表,包括DUAL虛表)
RNPS(Read No Package State),規定子程式不能讀取任何程式包的狀態資訊,如變數等。
WNDS(Write No Database State),規定子程式不能向資料庫寫入任何資訊。(即不能修改資料庫表)
WNPS(Write No Package State),規定子程式不能向程式包寫入任何資訊。(即不能修改程式包變數的值)
TRUST,指出子程式是可以相信的不會違反一個或多個規則。這個選項是需要的當用C或JAVA寫的函式透過PL/SQL呼叫時,因為PL/SQL在執行是對它們不能檢查。
這個編譯指令只能在程式包及物件型別說明部分指定。
以下是個例子,在編譯程式包體時報錯,它違反了RNDS規則。
create or replace package test_pragma as
function return date;
pragma restrict_references(test,rnds);
end;
/
create or replace package body test_pragma as
function test return date
as
vdate date;
begin
select sysdate into vdate from dual;
return vdate;
end test;
end test_pragma;
/
function return date;
pragma restrict_references(test,rnds);
end;
/
create or replace package body test_pragma as
function test return date
as
vdate date;
begin
select sysdate into vdate from dual;
return vdate;
end test;
end test_pragma;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9099175/viewspace-907138/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- plsql語法之_PRAGMA RESTRICT_REFERENCES()SQLREST
- 程式中umask(0)的意思?
- linux 中的tty意思Linux
- 有意思、有趣的文字
- 有意思的clip-path
- mysql中的“=”是什麼意思MySql
- DUMP函式結果的意思函式
- !important 什麼意思?Import
- sql語句中as的意思是什麼SQL
- linux幾個名詞的意思Linux
- 有意思的字串拘留實驗字串
- 軟體即數學的意思是?
- 軟體版本中的 符號意思符號
- 編譯核心make dep 的意思(轉)編譯
- 兩個有意思的專案
- C++中的(unsigned int)&代表的意思C++
- 前端非常有意思的小技巧前端
- TypeScript 中的字面量是什麼意思TypeScript
- PHP的引用計數是什麼意思?PHP
- 有意思!強大的 SVG 濾鏡SVG
- 分享一個有意思的錯誤
- 有意思、好用的免費API分享API
- MYSQL 主鍵的那些 “有意思” 故事MySql
- 有意思的前端函式面試題前端函式面試題
- 分享三個有意思的小程式
- [C#] ??雙問號的意思及用法C#
- 軟體版本的GA 代表什麼意思?
- 有意思的遊戲:GoogleXSSGame遊戲GoGAM
- C#中的 int?是什麼意思C#
- 一些有意思的網站網站
- MySQL一個有意思的問題MySql
- Linux 檔案顏色代表的意思Linux
- 英文短句“xxx for the rest of us”的意思REST
- HTML是什麼意思?HTML
- Java是啥意思呢?Java
- Fastboot是什麼意思?ASTboot
- C# @什麼意思C#
- UIView的contentMode中scale和aspect的字面意思UIView