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資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-LONG和LONG RAW變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-ROWID和UROWID變數SQL資料型別變數
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-CHAR和VARCHAR2變數SQL資料型別變數
- Scala結構型別與複合型別解析型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-使用者定義的PL/SQL子型別SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-有限制的子型別SQL資料型別
- 全面探討PL/SQL的複合資料型別(轉)SQL資料型別
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- PLSQL學習-【4複合資料型別】SQL資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-不同的最值大小SQL資料型別
- PL/SQL第一章--概述及變數型別SQL變數型別
- PLSQL Language Referenc-PL/SQL集合和記錄-集合型別SQL型別
- Pl/SQL 自定義型別SQL型別
- pl/sql記錄型別SQL型別
- pl/sql集合型別(一)SQL型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- c++基本型別和變數C++型別變數
- Java中基本型別Array與複合型別List的互相轉換Java型別
- pl/sql集合型別_varray(二)SQL型別
- 第2章 變數和基本型別變數型別
- SQL*Plus中使用DATE型別的繫結變數SQL型別變數
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- 在PL/SQL中使用日期型別SQL型別
- 複合型別(json)型別JSON
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數SQL變數
- PLSQL Language Reference-PL/SQL概覽-PL/SQL架構SQL架構
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-建立游標變數SQL變數
- GO語言基礎(結構+語法+型別+變數)Go型別變數
- T-SQL——關於表型別SQL型別
- C++中的基本變數型別介紹C++變數型別
- PL/SQL中char型別的暗門SQL型別
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數作為宿主變數SQL變數
- 【開發篇plsql】plsql資料型別(一) 集合型別SQL資料型別
- PLSQL Language Referenc-PL/SQL靜態SQL-游標變數-游標變數賦值SQL變數賦值
- JavaScript變數型別檢測總結JavaScript變數型別
- Oracle動態SQL引數支援複雜型別OracleSQL型別
- JavaScript基本型別總結JavaScript型別