PL SQL學習筆記 變數作用域及資料型別深入

2021-09-05 21:20:45 字數 2246 閱讀 9374

一:變數作用域

declare

current_block varchar2(10) := 'outer';

outer_block varchar2(10) := 'outer';

begin

dbms_output.put_line('[current_block]['||current_block||']');

declare

current_block varchar2(10) := 'inner';

begin

dbms_output.put_line('[current_block]['||current_block||']');

dbms_output.put_line('[outer_block]['||outer_block||']');

end;

dbms_output.put_line('[current_block]['||current_block||']');

end;

以上為引用一本書的**(oracle database 11g pl/sql程式設計)

輸出為

[current_block][outer]

[current_block][inner]

[outer_block][outer]

[current_block][outer]

這是兩個巢狀的程式塊

我們在子程式塊中重定義了父程式塊的變數

這個變數在子程式塊執行完之後又恢復了父程式塊中定義的值

二:%type    取乙個已知變數的資料型別

declare mytitle labor.xland.title%type;

begin

select title into mytitle from labor.xland where state = 0;

dbms_output.put_line(mytitle);

end;

上面例子中取了表title列的資料型別(varchar2)

然後檢索了一行一列資料,把這個資料賦值給我們定義的變數mytitle

當然你也可以定義多個變數

如:select title,id into mytitle,myid from labor.xland where state = 0;

三:%rowtype   取乙個已知行的資料型別,這應該是乙個物件型別

declare 

myrow labor.xland%rowtype;

begin

select * into myrow from labor.xland where state = 0;

dbms_output.put_line(myrow.title);

dbms_output.put_line(to_char(myrow.state));

end;

上例中我們取了某個表的rowtype,並定義了變數myrow

接著把這個表的一行資料賦值給了這個變數

輸出的時候只要以點來獲取這一行的某個列即可

四:record   這應該也是乙個物件

declare

type myrecordtype is record

( mytitle labor.xland.title%type,

mystate labor.xland.state%type

);myrecord myrecordtype;

begin

select title, state into myrecord from labor.xland;

dbms_output.put_line(myrecord.mytitle);

dbms_output.put_line(to_char(myrecord.mystate));

end;

如上**

我們先定義了一種資料型別(type)

這種型別包含兩個屬性,分別是mytitle和mystate

然後我們定義了乙個變數myrecord

這個變數的型別就是我們剛才定義的資料型別

接著我們把兩個資料賦值給類這個變數的兩個屬性

這裡的賦值順序是按屬性定義的先後順序給屬性賦值的

然後輸出

至此,資料型別仍未講完

還有table(表),array(陣列),exception(異常),cursor(游標)等型別等沒講

異常和游標將在後面的文章提到

作用域及變數

作用域 重點 什麼是作用域,就是乙個變數可以生效的範圍 變數不是在所有地方都可以使用的,而這個變數的使用範圍就是作用域 全域性作用域 全域性作用域是最大的作用域 在全域性作用域中定義的變數可以在任何地方使用 頁面開啟的時候,瀏覽器會自動給我們生成乙個全域性作用域 window 這個作用域會一直存在,...

python學習筆記 變數作用域

1區域性作用域 輸入def v1 a 5 區域性變數,只在函式內部使用 print a v1 print a 報錯,無法再函式外部訪問區域性變數輸出 5 traceback most recent call last file line 6,in print a nameerror name a i...

Js 變數及作用域

一 變數包含兩種不同資料型別的值 基本型別值 引用型別值 1 基本型別值 1.簡單的資料段,被儲存在棧記憶體中 2.按值訪問 3.不能給基本型別的值新增屬性 4.從乙個變數向另乙個變數複製值時,會建立這個值的副本,兩個變數不相互影響 2.引用型別值 1.值是儲存在記憶體中的物件,儲存在堆記憶體中 2...