共計 1738 個字符,預計需要花費 5 分鐘才能閱讀完成。
本篇內容主要講解“怎么使用數據庫新功能 PL/SCOPE”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“怎么使用數據庫新功能 PL/SCOPE”吧!
我在會話中打開 PL/Scope:
ALTER SESSION SET plscope_settings= identifiers:all
/
然后我創建了如下的表和包:
CREATE TABLE plch_stuff
amount NUMBER
, rating INTEGER
CREATE OR REPLACE PACKAGE plch_pkg
PROCEDURE do_stuff;
END plch_pkg;
CREATE OR REPLACE PACKAGE BODY plch_pkg
.......
END plch_pkg;
/
噢,抱歉,我不能讓你看到包體的代碼!請繼續 ….
我對 PL/Scope 的 USER_IDENTIFIERS 視圖進行如下查詢:
SELECT type, usage
FROM user_identifiers
WHERE object_name = PLCH_PKG
ORDER BY 1, 2
/
我看到這些結果:
TYPE USAGE
------------------ -----------
FUNCTION CALL
ITERATOR DECLARATION
ITERATOR REFERENCE
LABEL DECLARATION
PACKAGE DECLARATION
PACKAGE DEFINITION
PROCEDURE DECLARATION
PROCEDURE DEFINITION
VARIABLE DECLARATION
VARIABLE REFERENCE
VARIABLE REFERENCE
下面關于 plch_pkg 包的哪些句子是正確的?
(A)
包體里面沒有任何私有 (PRIVATE) 的子程序。
(B)
do_stuff 過程里面可能包含一個 FORALL 語句。
(C)
包體里面必須包含一個 PACKAGE 級別的變量(即不是在 do_stuff 里面聲明的)。
(D)
do_stuff 過程必須包含一個 GOTO 語句。
2011-11- 9 答案 AB.包體里面沒有任何私有 (PRIVATE) 的子程序。
對應每個包里定義的過程你會看到兩條記錄:PROCEDURE DECLARATION PROCEDURE DEFINITION 對應每個包里定義的函數你會看到兩條記錄:FUNCTION DECLARATION FUNCTION DEFINITION 結果里面只有這樣一對:PROCEDURE DECLARATION PROCEDURE DEFINITION 它就是對應于 do_stuff 過程,不再有其他子程序了。do_stuff 過程里面可能包含一個 FORALL 語句。
一個 FORALL 語句就像一個 FOR 循環,定義并且使用隱性游標。輸出里這兩行:ITERATOR DECLARATION ITERATOR REFERENCE 有可能對應 FORALL 語句。包體里面必須包含一個 PACKAGE 級別的變量(即不是在 do_stuff 里面聲明的)。
這僅僅是“可能”而非“必須”。我們知道包體里面某處定義了一個變量,根據是這兩行輸出:VARIABLE DECLARATION VARIABLE REFERENCE 但這個變量可能在 do_stuff 內部定義。為了確定這個變量是不是 PACKAGE 級的,你必須知道所有程序單元的最小行號,然后看看這個變量定義行號是否在此之前。do_stuff 過程必須包含一個 GOTO 語句。
輸出里面有這一行: LABEL DECLARATION 因此我們知道有一個標號被聲明了,它可能出現在程序某處,像這樣:label_name 但是輸出里面并沒有指示這個標號被引用, 否則的話我們應該看到另外一行輸出:LABEL REFERENCE(newkid 加注:即使看到標號被引用,也不意味著 GOTO, 比如退出循環的 EXIT 也可以引用標號)
到此,相信大家對“怎么使用數據庫新功能 PL/SCOPE”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
正文完