数据库之【标量类型及其使用篇】

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

数据库之【标量类型及其使用篇】

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

【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;



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