%rowtype和陣列的基本記載
這裡提一點關於oracle開發上面的一點小知識細節,由於自己對於oracle開發上面相對於管理來說比較弱!不管是開發還是管理在日常管理中都是非常重要的!
SQL> desc jj_one;
Name Type Nullable Default Comments
---- --------- -------- ------- --------
ID NUMBER(5) Y
NAME CHAR(40) Y
SQL> declare
2 v_ab jj_one%rowtype;
3 begin
4 select * into v_ab from jj_one where rownum=1;
5 insert into jj_one values v_ab;
6 end;
7 /
定義定量的方式A%rowtype,這裡的A可以是表明 檢視或者遊標。同樣可以在後面的dml語句中引用v_ab。這裡還是要注意下select * into v_ab from jj_one where rownum=1;這裡一定要是一一對應,當然可以用遊標來獲取所有的行,然後把遊標的獲取值迴圈付給變數,做迴圈輸出。
SQL> declare
2 v_ab jj_one%rowtype;
3 cursor cur01 is select * from jj_one;
4 begin
5 for v_ab in cur01 loop
6 dbms_output.put_line(v_ab.id||v_ab.name);
7 end loop;
8 end;
9 /
此時用遊標獲取所有的結果,然後遊標for迴圈賦值給變數v_ab。
SQL> declare
2 v_ab jj_one%rowtype;
3 begin
4 select * into v_ab from jj_one where rownum=1;
5 update jj_one set row=v_ab where id=2;
6 end;
7 /
上面的一個update也是利用變數v_ab直接賦值給row也就是jj_one的一行。
遊標的相關屬性:
遊標的宣告開啟以及管理都是oracle自動完成的,而相應的屬性有:
sql%rowcount:返回最近一條sql語句執行以後所影響的記錄條數
Sql%found:遊標指向的記錄是否存在,ture or false
sql%notfound:同上
sql%isopen:遊標是否開啟,true or false
而如果是顯示遊標只需要把上述的sql改成相應的顯示遊標名即可。可以根據遊標的屬性來調控pl/sql程式塊的執行,既然這裡說到了遊標的屬性名判斷,這裡個人有個小測試,由於以前學c++和c時記得對於非0則為真,0則為假,但是oracle中並不是如此,對於判斷只有true和false
SQL> declare
2 begin
3 if true then
4 dbms_output.put_line('true');
5 end if;
6 end;
7 /
true
PL/SQL procedure successfully completed
SQL> declare
2 begin
3 if -1 then
4 dbms_output.put_line('AM');
5 end if;
6 end;
7 /
declare
begin
if -1 then
dbms_output.put_line('AM');
end if;
end;
ORA-06550: 第 4 行, 第 4 列:
PLS-00382: 表示式型別錯誤
ORA-06550: 第 4 行, 第 1 列:
PL/SQL: Statement ignored
可以看出oracle對於pl/sql塊的解析出現了語義錯誤,oracle中並不存在c++等程式設計語言中bool型和number型的轉換。
這裡繼續來說一下關於oracle的陣列一些基本知識
SQL> declare
2 type v_ab_varray is varray(5) of number;
3 v_ab v_ab_varray;
4 begin
5 v_ab:=v_ab_varray(1,2,3,4,5);
6 for i in 1..v_ab.count loop
7 dbms_output.put_line(i);
8 end loop;
9 end;
10 /
1
2
3
4
5
上面先定義陣列型別v_ab_varray,然後定義此型別的一個陣列變數v_ab,其中的v_ab.count是這個陣列內的總數.
除了上述的陣列型別varray,還可以定義索引表和巢狀表實現陣列功能。
SQL> declare
2 type v_ab_tab is table of jj_one%rowtype index by binary_integer;
3 v_ab v_ab_tab;
4 begin
5 select * bulk collect into v_ab from jj_one;
6 for i in 1..v_ab.count loop
7 dbms_output.put_line(v_ab(i).id||' '||v_ab(i).name);
8 end loop;
9 end;
10 /
1 as
2 ad
1 as
其中的type v_ab_tab is table of jj_one%rowtype index by binary_integer定義一個表型別v_ab_tab,對於後面的index by binary_integer自己也不理解,e文的解釋是下標自增長,不需要每次插入資料初始化,每次extend增加一個空間。(有點難以理解)
[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1056669/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【numpy學習筆記】陣列的建立和基本運算筆記陣列
- 【java】【集合】陣列和集合的基本概述Java陣列
- Java陣列(基本+記憶體分析)Java陣列記憶體
- 陣列的基本操作陣列
- 【numpy學習筆記】陣列的儲存和下載筆記陣列
- 舌尖上的javascript陣列和字串基本操作JavaScript陣列字串
- Swift學習筆記(二十)——陣列的基本操作Swift筆記陣列
- 初識Java(Java陣列-陣列的基本操作)Java陣列
- JAVA的陣列基本用法Java陣列
- 陣列的基本演算法陣列演算法
- JS陣列基本方法JS陣列
- Javascript - 陣列和陣列的方法JavaScript陣列
- ORACLE中%TYPE和%ROWTYPE的使用Oracle
- 三,列表和陣列(筆記)陣列筆記
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- golang-陣列基本使用Golang陣列
- js完整教程一 : 基本概念和陣列操作JS陣列
- 《Java從入門到失業》第三章:基礎語法及基本程式結構(3.9):陣列(陣列基本使用、陣列的迴圈、陣列拷貝、陣列排序、多維陣列)Java陣列排序
- %rowtype
- JS中陣列物件的基本結構JS陣列物件
- JavaScript 中陣列 sort() 方法的基本使用JavaScript陣列
- 資料結構筆記整理和思考--動態陣列和靜態陣列的領悟資料結構筆記陣列
- 矩陣和陣列矩陣陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- JNI/NDK開發指南(5):訪問陣列(基本型別陣列與物件陣列)陣列型別物件
- 【Java】int[] 陣列 和 Integer陣列的轉換Java陣列
- Oracle遊標遍歷%rowtype中的記錄Oracle
- pl/sql %type和%rowtype區別SQL
- SPL 陣列過載陣列
- 陣列小記陣列
- Java基礎學習之陣列基本屬性和方法Java陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- 求二維陣列中最大子陣列的和陣列
- JavaScript中對陣列和陣列API的認識JavaScript陣列API
- 陣列指標和指標陣列陣列指標
- rman_copy和基本命令記載
- 樹狀陣列3種基本操作陣列
- Java學習筆記【1】陣列的宣告和建立Java筆記陣列