學習筆記 過程、同義詞、序列

wmlm發表於2007-05-25
過程的呼叫,同義詞的有效性,降序列預設最大值[@more@]


儲存過程的執行方法:(包括函式)
在sql*plus中使用EXEC 過程名
SQL> exec dbms_stats.gather_table_stats(ownname=>'SG',tabname=>'EMPLOYEES',cascade=>true,degree=>4);

函式直接呼叫
Functions are called anywhere an expression is valid:
==》 In an assignment:
order_volume := open_orders(SYSDATE, 30);

==》 In a Boolean expression:
IF (open_orders(SYSDATE, 30) < 500 )
THEN …

==》 In a default value assignment:
DECLARE
order_volume NUMBER
DEFAULT open_orders(SYSDATE, 30);
BEGIN …

==》 In a SQL statement:
SELECT vendor_name
FROM vendors
WHERE open_orders(SYSDATE, 30, vendor_id) = 0;
==》 In the parameter list of another program:
process_vendor(vendor_id,open_orders(vendor=>vendor_id));

引數傳入的兩種方式:以位置標記和以引數名標記
上面是以引數名為標記的例子,下面是以位置標記的例子
SQL> exec dbms_utility.analyze_schema('SG','ESTIMATE',null,10);

關於資料包上的可執行許可權的說明
When you grant the
EXECUTE privilege on a package, it is for all programs and data structures in
the package specification. You cannot grant privileges on only one procedure
or function within a package.

在資料包中函式或者過程可以過載overload
示例如下:
create or replace package pk_test is
-- Public function and procedure declarations
function f_tt(p_msg varchar2) return varchar2;
function f_tt(p_code number) return number;
end pk_test;

關於同義詞的引用
1 只要它人C有基表(A.tab_name)的選擇權,那麼B的同義詞a_tab(A.tab_name)不需要賦權給C,C也能訪問a_tab;
USER A:
GRANT SELECT ON TAB TO B;
GRANT SELECT ON TAB TO C;

USER B:
CREATE SYNONYM A_TAB FOR A.TAB;

USER C:
SELECT * FROM B.A_TAB;

2 如果C沒有基表的選擇權,那麼要透過B賦權給C,C才能訪問這個同義詞。過程如下:
USER A:
GRANT SELECT ON TAB TO B WITH GRANT OPTION;

USER B:
CREATE SYNONYM A_TAB FOR A.TAB;
GRANT SELECT ON A_TAB TO C;

USER C:
SELECT * FROM B.A_TAB;

3 同義詞沒有失效的概念,它可以引用一個不存在的物件。

關於降序序列
降序序列的預設最大值為-1,如果建立一個最大值為0的降序序列,除了要指出start with 和 increment by 外,還需要指出maxvalue

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

相關文章