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

来源:互联网 发布:云计算服务器搭建 编辑:程序博客网 时间:2024/06/10 10:26

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

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

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

【1.标量类型】

--数字binary_integer --带符号的整数-2的31次幂-1到2的31次幂到-1natural        --自然数naturaln       --非自然数且非空positive       --正整数positiven      --非正整数且非空signtype       --只能存1、0、-1三个值number         --存整数、定点数、浮点数float          --126位的二进制的浮点数decimal        --38位十进制的定点数integer        --38位十进制数字的整数real           --63位二进制数字的浮点数pls_integer    --带符号的整数、区别是以机器运算为基础,速度快、存储空间小--字符char           --固定长度的字符32767raw            --存二进制数据或字节串long long raw  --可变长度字符串32760varchar2(varchar string)--可变长度的字符串32767数据类型 SQL类型   PL/SQL类型CHAR     1..2000   1..32767LONG     1..2GB    1..32760LONG     RAW1..2GB 1..32760RAW      1..2000   1..32767VARCHAR2 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;



原创粉丝点击