1.簡單變數型別與定義sql 與pl/sql 通用變數型別:varchar2(max_length) 最大4000位元組
char(max_length) 最大2000位元組
number(x,y) 最長x位,y位小數
date 7個位元組,預設格式dd-mon-yy
如:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
注意:dual 是只有一行一列的偽表,sys下,方便查詢,時間分鐘mi和mm 都可行pl/sql 專用變數型別:boolean true/false/null
binary_integer 整數
變數的定義賦值用:「:=」
比如:declare
v_gender char(1);
v_count binary_integer :=0;
v_totle_sal number(7,2) :=0;
v_date date :=sysdate+7; -- 預設加的天數
c_pi constant number(3,2) :=3.14; -- 常量
c_vaild boolean not null :true; -- 變數不為null
begin
dbms_output.put_line('hello!');
end;
2.復合變數(組合變數)
a 表型別(一列資料):類似於陣列,有下表和資料兩部分組成,沒有長度限制,可以動態增長。
declare
type ename_table_type --自定義型別
is table of varchar2(20) --資料型別是varchar2
index by binary_integer;
v_ename_table ename_table_type;
begin
select ename
into v_ename_table(1) --放入第乙個下標
from emp where empno = 7788;
dbms_output.put_line(v_ename_table(1));
end;
/b 記錄型別(相當於物件導向封裝的物件型別):包括多個元件,元件的資料型別可以不同,
每個元件叫做field(域)。
declare
type emp_record_type is record
(name varchar2(20), job varchar2(10));
emp_record emp_record_type;
begin
select ename , job into emp_record.name , emp_record.job
from emp where empno = 7788;
dbms_output.put_line(emp_record.name||' - '||emp_record.job);
end;
/注意:「||」 是字串連線符號,可以將字串連線起來。
3 %type與%rowtype:
declare
v_id emp.empno%type;
v_job emp.job%type;
begin
select empno into v_id from emp
where ename='scott';
end;
注意:%type表示變數型別是資料庫表中字段型別。emp 表中empno 型別是什麼,那麼v_id 就是什麼型別。
如果我們想定義的結構和表emp行記錄一樣呢?
declare
/*以前的方式,老辦法
type record_type is record (
id emp.empno%type,
name emp.ename%type,
job emp.job%type
--其他的字段,此處省略..
); emp_record record_type;
*/--新辦法,更簡潔
emp_record emp%rowtype;
begin
select empno,ename into emp_record.empno ,
emp_record.ename from emp where empno = 7788;
dbms_output.put_line('name is :'||emp_record.ename);
end;
注意:%rowtype:變數型別是emp表全部欄位的型別。也就是你當前定義的型別,和emp 所有的字段型別一致,
相當於你定製和乙個和emp 表一樣的網格,裡面可以存放存放和emp 各個字段對應型別的資料。
4 賦值語句:
a 直接賦值與表示式賦值:
declare
v_count number(2) :=0;
v_married boolean;
emp_record emp%rowtype;
begin
v_count :=10;
emp_record.ename :='fuzhi';
v_married :=(1=2); --表示式賦值
end;
注意:sql和plsql 中「=」表示比較。
b 表示式賦值
declare
v_married boolean :=true;
v_comm emp.comm%type;
begin
select comm into v_comm
from emp where empno = 7788;
v_married :=(v_comm is null);
dbms_output.put_line(v_married); -- boolean 型別不能通過這個列印,報錯
end;
c boolean 可以通過if else 進行判斷
declare
v_married boolean :=true;
v_comm emp.comm%type;
begin
select comm into v_comm
from emp where empno = 7788;
v_married :=(v_comm is null);
if v_married = true then
dbms_output.put_line('true');
else
dbms_output.put_line('false');
end if;
end;
d 賦值使用函式
declare
emp_record emp%rowtype;
v_count number;
v_now char(30);
v_user char(20);
begin
select ename
into emp_record.ename
from emp where empno = 7788;
v_count :=length(emp_record.ename);
v_now :=to_char(sysdate,'yyyy-mm-dd');
v_user :=user;
dbms_output.put_line(v_now);
dbms_output.put_line(v_user);
dbms_output.put_line(v_count);
end;
注意:user 是當前使用者,show user 可以進行檢視
e 替代變數的使用:
declare
emp_record emp%rowtype;
v_count number;
v_now char(30);
v_user char(20);
begin
select ename
into emp_record.ename
from emp where empno =&no;
dbms_output.put_line(emp_record.ename);
end;
PL SQL資料型別
create or replace procedure pr mytest is v test number 8 變數 v char varchar2 10 c changl constant number 12,3 3.14 常量 v bm t hq ryxx.bumbm type type ty...
PL SQL 變數與常用資料型別
以oracle8i為例,可以使用的基礎資料型別有 型別子類 說 明 範 圍 oracle限制 char character string rowid nchar 定長字串 民族語言字符集 0 32767 可選,確省 1 varchar2 varchar,string nvarchar2 可變字串 民...
PL SQL資料型別(三)
pl sql資料型別主要包括標量資料型別和復合資料型別。標量資料型別比較簡單,不在詳細說明。復合資料型別主要包括pl sql記錄 pl sql表 索引表 巢狀表和變長陣列 varray 下邊詳細描述。pl sql記錄 pl sql記錄類似於高階語言中的結構,可以儲存多個字段值,類似於表中的一行資料。...