PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-識別符號的作用域和可見性
識別符號的作用域(scope)和可見性(visibility)
識別符號的scope是指在PL/SQL單元中可以引用該識別符號的區域。
識別符號的可見性是指可以不使用限定來引用該識別符號的PL/SQL單元的區域。
在PL/SQL單元中宣告的識別符號是本地的;如果該PL/SQL單元有子單元,則對於子單元來講是全域性的。
如果子單元重新定義了一個和全域性識別符號同名的識別符號,則在子單元內部2個識別符號都在scope中,但只有本地的識別符號是可見的。為了引用全域性的識別符號,子單元必須使用定義的單元的名稱來限定它,如果定義全域性識別符號的單元沒有名稱,則不能引用。
PL/SQL單元不能引用平級的其它單元中宣告的識別符號,因為這些識別符號對於塊來講即不是本地的也不是全域性的。
-- 外部塊 DECLARE a CHAR; -- a(CHAR)的scope開始 b REAL; -- b的scope開始 BEGIN -- a(CHAR), b可見
-- 第1個子塊 DECLARE a INTEGER; -- a(INTEGER)scope開始 c REAL; -- c的scope開始 BEGIN -- a(INTEGER), b, c可見 NULL; END; -- a(INTEGER)和c的scope結束
-- 第2個子塊 DECLARE d REAL; -- d的scope開始 BEGIN -- a(CHAR), b, d可見 NULL; END; -- d的scope結束
-- a(CHAR), b可見 END; |
<<outer>> -- 標籤 DECLARE birthdate DATE := to_date('09-08-70', 'DD-MM-YYYY'); BEGIN DECLARE birthdate DATE := to_date('29-09-70', 'DD-MM-YY'); BEGIN --前者是本地的,後者是限定的全域性的 IF birthdate = outer.birthdate THEN DBMS_OUTPUT.PUT_LINE ('相同的生日'); ELSE DBMS_OUTPUT.PUT_LINE ('不同的生日'); END IF; END;
END;
|
CREATE OR REPLACE PROCEDURE check_credit (credit_limit NUMBER) AS rating NUMBER := 3; --全域性變數 --子程式 FUNCTION check_rating RETURN BOOLEAN IS rating NUMBER := 1; --本地變數 over_limit BOOLEAN; BEGIN IF check_credit.rating <= credit_limit THEN -- 引用全域性變數(使用過程名來限定) over_limit := FALSE; ELSE over_limit := TRUE; rating := credit_limit; -- 引用本地量 END IF; RETURN over_limit; END check_rating; BEGIN IF check_rating THEN DBMS_OUTPUT.PUT_LINE ('信用等級超出限制 (' || TO_CHAR(credit_limit) || '). ' || '等級: ' || TO_CHAR(rating)); ELSE DBMS_OUTPUT.PUT_LINE('信用等級OK. ' || '等級: ' || TO_CHAR(rating)); END IF; END;
BEGIN check_credit(1);
END;
|
不能在同一PL/SQL單元中宣告相同的識別符號,如果宣告瞭,則在引用時會產生錯誤。
DECLARE id BOOLEAN; id VARCHAR2(5); -- 重複宣告 BEGIN id := FALSE;
END; |
--在不同的PL/SQL單元中宣告同名變數 DECLARE PROCEDURE p IS x VARCHAR2(1); BEGIN x := 'a'; DBMS_OUTPUT.PUT_LINE('在過程P中, x = ' || x); END;
PROCEDURE q IS x VARCHAR2(1); BEGIN x := 'b'; DBMS_OUTPUT.PUT_LINE('在過程q中, x = ' || x); END; BEGIN p; q;
END;
|
-- 子程式和塊具有相同的名稱echo <<echo>> DECLARE x NUMBER := 5;
PROCEDURE echo AS x NUMBER := 0; BEGIN --都是指本地的x DBMS_OUTPUT.PUT_LINE('x = ' || x); DBMS_OUTPUT.PUT_LINE('echo.x = ' || echo.x); END; BEGIN echo;
END;
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1102776/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-識別符號引用SQL符號
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-分隔符、識別符號SQL符號
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-宣告SQL
- PLSQL Language Reference-PL/SQL語言基礎-詞彙單元-字面量SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-比較操作符SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-邏輯操作符SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-連線操作符SQL
- PLSQL Language Reference-PL/SQL概覽-PL/SQL語言基礎SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-操作符優先順序SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-BOOLEAN表示式SQLBoolean
- PLSQL Language Reference-PL/SQL語言基礎-表示式-短路計算SQL
- PLSQL Language Reference-PL/SQL語言基礎-表示式-PL/SQL表示式中的SQL函式SQL函式
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用SELECT INTO賦值SQL變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用賦值語句賦值SQL變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-條件編譯-條件編譯指令限制SQL編譯
- PLSQL Language Reference-PL/SQL語言基礎-條件編譯-條件編譯舉例SQL編譯
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- PLSQL Language Reference-PL/SQL語言基礎-條件編譯-獲取和列印編譯後的原始碼文字SQL編譯原始碼
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-作為子程式引數來賦值SQL變數賦值
- javascript基礎語法——變數和識別符號JavaScript變數符號
- PLSQL Language Reference-PL/SQL子程式-子程式的副作用(side effects)SQLIDE
- C語言-識別符號命名C語言符號
- PLSQL Language Reference-PL/SQL概覽-PL/SQL的優點SQL
- PLSQL Language Reference-PL/SQL概覽-PL/SQL架構SQL架構
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-LONG和LONG RAW變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-不同的最值大小SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-ROWID和UROWID變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-CHAR和VARCHAR2變數SQL資料型別變數
- 2.3Python基礎語法(1):識別符號Python符號
- PLSQL Language Reference-PL/SQL概覽-PL/SQL的主要功能SQL
- PLSQL Language Reference-PL/SQL子程式-過載子程式SQL
- 1413: C語言合法識別符號C語言符號
- C語言中識別符號的作用域、名稱空間、連結屬性、生命週期、儲存型別C語言符號型別
- java基礎語法--註釋、識別符號、關鍵字、資料型別、型別轉換、變數、常量、作用域、運算子Java符號資料型別變數
- Java基礎常見英語詞彙Java
- PLSQL Language Reference-PL/SQL新功能-版本11.1 新功能SQL
- PLSQL Language Reference-PL/SQL新功能-版本11.2.0.1新功能SQL