PL SQL 資料型別與定義 賦值(二)

2021-09-01 15:46:46 字數 4296 閱讀 5135

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記錄類似於高階語言中的結構,可以儲存多個字段值,類似於表中的一行資料。...