--插入資料
/**//*
set serveroutput on --允許伺服器輸出
declare
maxrecords constant int:=100;
i int:=1;
begin
for i in 1..maxrecords
loop
insert into student(sid,sdate)values(i,sysdate);
end loop
--dbms_output.put_line('成功錄入資料!');
commit;
end;
*/
--select * from student;
--聲明一個變數
/**//*
declare
pi constant number(9):=3.1415926;
begin
commit;
end;
*/
--複合資料型別(常見的五種)
--1 .使用 %type 定義變數
--為了讓PL/SQL中變數的類型和資料表中的欄位的資料類型一致,Oracle 9i提供了%type定義方法。
--這樣當資料表的欄位類型修改後,PL/SQL程式中相應變數的類型也自動修改.
/**//*
Declare
mydate student.sdate%type;
begin
commit;
end;
*/
--2. 定義記錄類型變數
--將多個基礎資料型別 (Elementary Data Type)捆綁在一起的記錄資料類型。
/**//*
set serveroutput on
declare
type myrecord is record(
sid int,
sdate date);
srecord myrecord; --聲明一個自訂記錄類型變數的執行個體
begin
select sid,sdate into srecord from student where sid=68;
dbms_output.put_line('ID: '|| srecord.sid ||'Date:'|| srecord.sdate); --'||': 它是字串串連符.
end;
*/
--3.使用 %rowtype 變數
--使用%type可以使變數獲得欄位的資料類型,使用%rowtype可以使變數獲得整個記錄的資料類型。
--比較兩者定義的不同:變數名 資料表.列名%type,變數名 資料表%rowtype。
/**//*
set serveroutput on
Declare
mytableRow student%rowtype;
begin
select * into mytableRow
from student
where sid=88;
dbms_output.put_line(mytableRow.sid || mytableRow.sdate);
end;
*/
--4.定義一維表類型變數
--表類型變數和資料表是有區別的,定義表類型變數的文法如下:
-- ―――――――――――――――――――――――――――――――――――――
-- type 表類型 is table of 類型 index by binary_integer;
-- 表變數名 表類型;
-- ―――――――――――――――――――――――――――――――――――――
-- 類型可以是前面的類型定義,index by binary_integer子句代表以符號整數為索引,
-- 這樣訪問表類型變數中的資料方法就是“表變數名(索引符號整數)”。
/**//*
Declare
type tabletype1 is table of varchar2(4) index by binary_integer; --定義一個字元型的一維數組
type tabletype2 is table of student.sid%type index by binary_integer;--定義了一個整數數型的數組
table1 tabletype1; --執行個體聲明
table2 tabletype2; --執行個體聲明
begin
table1(1):='學生';
table1(2):='職員';
table2(1):=88;
table2(2):=89;
dbms_output.put_line(table1(1)||table2(1));
dbms_output.put_line(table1(2)||table2(2));
end;
*/
--5.定義多維類型表變數
--相當於定義多維陣列.
--注意在運行下面的語句前要在資料庫中插入資料.
Declare
type tabletype1 is table of student%rowtype index by binary_integer;
table1 tabletype1;
begin
select * into table1(60)
from student
where sid=60;
dbms_output.put_line(table1(60).sid ||table1(60).sdate);
end;