PL/SQL基本結構---PLSQL複合型別---表型別變數table
表型別變數table
語法如下:
type 表型別 is table of 型別 index by binary_integer;
表變數名 表型別;
型別可以是前面的型別定義,index by binary_integer 子句代表以符號整數為索引,這樣訪問表
型別變數中的資料方法就是“表變數名(索引符號整數)”。table型別,相當於java中的Map容器,
就是一個可變長的陣列,key(符號整數索引)必須是整數,可以是負數,value(型別)可以是
標量,也可以是record型別。可以不按順序賦值,但必須先賦值後使用。
1. 定義一維表型別變數
―――――――――――――――――――――――――――――――――――――
declare
type t_tb is table of varchar2(20) index by binary_integer;
v_tb t_tb;
begin
v_tb(100):='hello';
v_tb(98):='world';
dbms_output.put_line(v_tb(100));
dbms_output.put_line(v_tb(98));
end;
型別為record的表型別變數
declare
type t_rd is record(id number,name varchar2(20));
type t_tb is table of t_rd index by binary_integer;
v_tb2 t_tb;
begin
v_tb2(100).id:=1;
v_tb2(100).name:='hello';
--dbms_output.put_line(v_tb2(100).id);
--dbms_output.put_line(v_tb2(100).name);
dbms_output.put_line(v_tb2(100).id||' '||v_tb2(100).name);
end;
―――――――――――――――――――――――――――――――――――――
2. 定義多維表型別變數
該程式定義了名為tabletype1的多維表型別,相當於多維陣列,table1是多維表型別變數,將數
據表tempuser.testtable中recordnumber為60的記錄提取出來
存放在table1中並顯示。
―――――――――――――――――――――――――――――――――――――
declare
type tabletype1 is table of testtable%rowtype index by binary_integer;
table1 tabletype1;
begin
select * into table1(60) from tempuser.testtable where recordnumber=60;
dbms_output.put_line(table1(60).recordnumber||table1(60).currentdate);
end;
備註:在定義好的表型別變數裡,可以使用count、delete、first、last、next、exists和prior
等屬性進行操作,使用方法為“表變數名.屬性”,返回的是數字。
set serveroutput on
declare
type tabletype1 is table of varchar2(9) index by binary_integer;
table1 tabletype1;
begin
table1(1):='成都市';
table1(2):='北京市';
table1(3):='青島市';
dbms_output.put_line('總記錄數:'||to_char(table1.count));
dbms_output.put_line('第一條記錄:'||table1.first);
dbms_output.put_line('最後條記錄:'||table1.last);
dbms_output.put_line('第二條的前一條記錄:'||table1.prior(2));
dbms_output.put_line('第二條的後一條記錄:'||table1.next(2));
end;
―――――――――――――――――――――――――――――――――――――
*****************************************
%type和%rowtype
*****************************************
使用%type定義變數,為了讓PL/SQL中變數的型別和資料表中的欄位的資料型別一致,Oracle
9i提供了%type定義方法。這樣當資料表的欄位型別修改後,PL/SQL程式中相應變數的型別也
自動修改。
―――――――――――――――――――――――――――――――――――――
create table student(
id number,
name varchar2(20),
age number(3,0)
);
insert into student(id,name,age) values(1,'susu',23);
--查詢一個欄位的變數
declare
v_name varchar2(20);
v_name2 student.name%type;
begin
select name into v_name2 from student where rownum=1;
dbms_output.put_line(v_name2);
end;
--查詢多個欄位的變數
declare
v_id student.id%type;
v_name student.name%type;
v_age student.age%type;
begin
select id,name,age into v_id,v_name,v_age from student where rownum=1;
dbms_output.put_line(v_id||' '||v_name||' '||v_age);
end;
--查詢一個型別的變數,推薦用*
declare
v_student student%rowtype;
begin
select * into v_student from student where rownum=1;
dbms_output.put_line(v_student.id||' '||v_student.name||' '||v_student.age);
end;
--也可以按欄位查詢,但是欄位順序必須一樣,不推薦這樣做
declare
v_student student%rowtype;
begin
select id,name,age into v_student from student where rownum=1;
dbms_output.put_line(v_student.id||' '||v_student.name||' '||v_student.age);
end;
declare
v_student student%rowtype;
begin
select id,name,age into v_student.id,v_student.name,v_student.age from student where
id=1;
--select * into v_student.id,v_student.name,v_student.age from student where id=1;
dbms_output.put_line();
end;
―――――――――――――――――――――――――――――――――――――
備註:insert,update,delete,select都可以,create table,drop table不行。DPL,DML,
和流程控制語句可以在pl/sql裡用,但DDL語句不行。
declare
v_name student.name%type:='wang';
begin
insert into student(id,name,age) values(2,v_name,26);
end;
begin
insert into student(id,name,age) values(5,'hehe',25);
end;
declare
v_name student.name%type:='hexian';
begin
update student set name=v_name where id=1;
end;
begin
update student set name='qinaide' where id=2;
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14377/viewspace-2375490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PL/SQL第一章--概述及變數型別SQL變數型別
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- c++基本型別和變數C++型別變數
- 複合型別(json)型別JSON
- T-SQL——關於表型別SQL型別
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- GO語言基礎(結構+語法+型別+變數)Go型別變數
- C++中的基本變數型別介紹C++變數型別
- JavaScript基本型別總結JavaScript型別
- JavaScript變數型別檢測總結JavaScript變數型別
- PHP變數型別PHP變數型別
- Java 變數型別Java變數型別
- 變數型別-Set變數型別
- Go 複合型別之字典型別介紹Go型別
- 修改全域性變數時,可變型別和不可變型別的區別變數型別
- Python - 基本資料型別_Number 數字、bool 布林、complex 複數Python資料型別
- 02. 複合型別(Composite Types)型別
- Redis基本資料型別底層資料結構Redis資料型別資料結構
- 資料型別,變數資料型別變數
- JavaScript - 變數、值、型別JavaScript變數型別
- 變數型別轉換變數型別
- 在SQL Server 2008中的SP上使用表型別值引數MHSQLServer型別
- js基本型別和引用型別區別JS型別
- C基本資料型別小結資料型別
- 第 10 節:複合型別 2: 切片型別
- 學習變數的目的及基本資料型別介紹變數資料型別
- C++入門教程(5):基本資料型別和變數C++資料型別變數
- 資料結構複習-01enum列舉型別資料結構型別
- 如何判斷變數型別變數型別
- Pytorch變數型別轉換PyTorch變數型別
- Python3學習(基本資料型別-集合-字典-基本資料型別總結)Python資料型別
- 物聯網學習教程—定義結構體型別變數的方法結構體型別變數
- MySQL資料型別及sql模型及伺服器變數MySql資料型別模型伺服器變數
- JavaScript - 基本型別與引用型別值JavaScript型別
- 基本資料型別與字串型別資料型別字串
- Java的基本型別和引用型別Java型別
- Typescript:基本型別TypeScript型別