數據庫之【標量類型及其使用篇】

******************************************

數據庫之【標量類型及其使用篇】

******************************************

【1.標量類型】

--數字
binary_integer --帶符號的整數-2的31次冪-1到2的31次冪到-1
natural        --自然數
naturaln       --非自然數且非空
positive       --正整數
positiven      --非正整數且非空
signtype       --只能存1、0、-1三個值
number         --存整數、定點數、浮點數
float          --126位的二進制的浮點數
decimal        --38位十進制的定點數
integer        --38位十進制數字的整數
real           --63位二進制數字的浮點數
pls_integer    --帶符號的整數、區別是以機器運算爲基礎,速度快、存儲空間小
--字符
char           --固定長度的字符32767
raw            --存二進制數據或字節串
long long raw  --可變長度字符串32760
varchar2(varchar string)--可變長度的字符串32767

數據類型 SQL類型   PL/SQL類型
CHAR     1..2000   1..32767
LONG     1..2GB    1..32760
LONG     RAW1..2GB 1..32760
RAW      1..2000   1..32767
VARCHAR2 1..4000   1..32767

--日期
date     --日期時間
timestamp--日期時間精確到小數秒到小數後0-9(默認6)位
--布爾
boolean
--LOB類型 存儲非結構化數據
blob/clob/nclob/bfile

--屬性類型
%type --變量或表字段對象的引用
%rowtype--錶行的引用

【ORACLE中定義變量的幾種方式】

--聲明可從外面接收的參數
num number :=&id;
--聲明可從外面接收的公用變量,並有提示
accept num prompt '請輸入一個數字:';
--使用時:&num就可以在PLSQL塊中訪問
--聲明可以公用的變量
variable num number;
--在PLSQL語句外進行賦值
execute :num :=100;
--在PLSQL語句中進行使用
:num :=100;

【2.舉例使用】
--2.1 BFILE使用示例
select * from dba_directories; --查詢系統中創建的所有目錄,在SYS用戶下
--創建目錄
create directory book_text as 'c:\text';
grant read on directory images to scott;
create table my_book (file_descr varchar2(40),book_file bfile);
--插入
insert into my_book values('第一章',bfilename('BOOK_TEXT','test.txt'));
--讀寫
declare--寫
  fhandle utl_file.file_type;
begin
  fhandle := utl_file.fopen('BFILE_DIR', 'lunartest1.txt', 'w');
  utl_file.put_line(fhandle, 'aaa');
  utl_file.put_line(fhandle, 'bbb');
  utl_file.fclose(fhandle);
end;
/

declare--讀
  fhandle   utl_file.file_type;
  fp_buffer varchar2(4000);
begin
  fhandle := utl_file.fopen('BFILE_DIR', 'lunartest1.txt', 'R');
  utl_file.get_line(fhandle, fp_buffer);
  dbms_output.put_line(fp_buffer);
  utl_file.get_line(fhandle, fp_buffer);
  dbms_output.put_line(fp_buffer);
  utl_file.fclose(fhandle);
end;
/

--2.2 BLOB使用示例
create directory images as 'c:\images'; --創建目錄
grant read on directory images to scott;--授權給用戶
create table my_img(img_no number,img_name varchar2(200),img blob); --建BLOB類型字段表
--將文件中的圖片存到數據庫中
declare
  l_bfile bfile;
  l_blob  blob;
begin
  insert into my_img (img) values (empty_blob()) return img into l_blob;
  l_bfile := bfilename('IMAGES', '\one.jpg');
  dbms_lob.open(l_bfile, dbms_lob.file_readonly);
  dbms_lob.loadfromfile(l_blob, l_bfile, dbms_lob.getlength(l_bfile));
  dbms_lob.close(l_bfile);
  commit;
end;

--2.3 CLOB示例
create table test1(tno number,tname varchar2(200),text clob);
insert into test1 values(1,'李海','追求幸福美好的生活將使他的青春變作一曲閃光的樂章!');
declare
  c_text clob;
  sta    number;
  len    number;
  t_text varchar2(2000);
begin
  select text into c_text from test1 where tno = 1;
  sta := 1;
  len := 5;
  --len :=length(c_text);--用函數獲取文本長度
  dbms_lob.read(c_text, len, sta, t_text);
  dbms_output.put_line(t_text);
end;

--2.4 TABLE類型示例(組合類型的使用)
DECLARE
  TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE;
  emp_tab EmpTabTyp := EmpTabTyp(NULL); -- initialize(定義同時初始化必須的)
BEGIN
  SELECT * INTO emp_tab(1) FROM emp WHERE empno = 7788;
  dbms_output.put_line(emp_tab(1).ename || ' sal is: ' || emp_tab(1).sal);
END;

--2.5 RECORD,VARRAY記錄數組類型示例(組合類型的使用)
DECLARE
  TYPE definition IS RECORD(
    xm VARCHAR2(20),
    gz VARCHAR2(200));
  TYPE DICTIONARY IS VARRAY(2000) OF definition;
  lexicon DICTIONARY := DICTIONARY(); --定義同時初始化(必須的)
BEGIN
  lexicon.EXTEND;
  select ename, job
    into lexicon(1).zm,lexicon(1).gz
    from emp
   where empno = 7369;
  DBMS_OUTPUT.put_line(lexicon(1).xm || lexicon(1).gz);
END;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章