1byte=8bit
a char(32767 byte)
varchar2 4000byte
number(5,2) 999.99
number(3,-2)99900;
round trunc ceil floor
pls_integer(性能更好) 2**31
binary_integer
positive
natural
-----------------------字符串测试
DECLARE
c_str CHAR(3);
str VARCHAR2(10) not null:=''; 限制为非空
BEGIN
c_str := 'abc';
dbms_output.put_line('c_str=========' || c_str || '==============');
c_str := 'a'; --占用3个位置
dbms_output.put_line('c_str=========' || c_str || '==============');
str := 'abc'; --变长
dbms_output.put_line('str=========' || str || '==============');
str := rpad('a', 5); --右填充
dbms_output.put_line('str=========' || str || '==============');
c_str := 'abcd';
EXCEPTION
WHEN value_error THEN
dbms_output.put_line('value error!');
END;
--------------------------record 测试
SELECT * FROM emp;
DECLARE
TYPE emp_record IS RECORD( --记录
ename emp.ename%TYPE,
job emp.ename%TYPE);
employee emp_record;
type default_type is record(
birthday date:=trunc(sysdate),
age number(3):=0);
BEGIN
SELECT ename, job INTO employee FROM emp WHERE empno = 7369;
dbms_output.put_line('employee name:' || employee.ename ||
' ,employee job:' || employee.job);
END;
------------------------------------
declare
type my_emp_record is record( --嵌套
id emp.empno%type,
employee emp_pkg.emp_record);
mydata my_emp_record;
begin
mydata.id:='7369';
mydata.employee:=emp_pkg.empTool(mydata.id);
dbms_output.put_line(mydata.employee.name);
end;
----------------------index by table (非约束索引 线性 稀疏表
记录和index-by表在包或过程中存储,不能作为对象存储
varray 可存储,索引是紧密 初始化 从1 开始 定长
declare
type table_type is table of emp_pkg.emp_record index by binary_integer;
tab table_type;
emp_id emp.empno%type:=7369;
location binary_integer;
begin
location:=emp_id;
tab(location):=emp_pkg.empTool(emp_id);
dbms_output.put_line(tab(location).name);
dbms_output.put_line(tab(location).job);
dbms_output.put_line('d'||tab(location+1).name);
dbms_output.put_line(tab(location).job);
exception when others then
dbms_output.put_line('at '||location||' cannot find data!');
end;
---------------------找到存在的值
declare
type table_type is table of integer index by binary_integer;
tab table_type;
begin
tab(1):=1000;
tab(4):=200;
dbms_output.put_line(tab.count);
for i in tab.first..tab.last loop
if(tab.exists(i))then
dbms_output.put_line(tab(i));
else
dbms_output.put_line('no data in slot:'||i);
end if ;
end loop;
dbms_output.put_line(tab.next(0));
dbms_output.put_line(tab.prior(0));
dbms_output.put_line(tab.next(1));
dbms_output.put_line(tab.next(2));
dbms_output.put_line(tab.next(4));
dbms_output.put_line(tab.prior(5));
end;
---------------varray
declare
type my_numbers_type is varray(4) of number;
my_numbers my_numbers_type;
begin
my_numbers:=my_numbers_type(3,4,5); --初始化
for i in 1..my_numbers.count loop
dbms_output.put_line(my_numbers(i));
end loop;
end;
---------------创建对象
create or replace type point_type is object(
x number,
y number);
create or replace type points_varray_type is varray(10) of point_type;
create or replace type points_nested_table_type is table of point_type; --嵌套表
declare
type points_varray_type is varray(10) of point_type;
points points_varray_type:=points_varray_type();
a_point point_type;
pt point_type;
begin
a_point:=point_type(3,4);
points:=points_varray_type(point_type(1,2),point_type(2,3),
a_point,point_type(4,5)); --初始化
for i in 1..points.count loop
pt:=points(i);
dbms_output.put_line('x='||pt.x||', y='||pt.y);
end loop;
end;
---------嵌套表
create table environment_data(
sample_id number(3),
points_varray points_varray_type,
points_nested_table points_nested_table_type)
nested table
points_nested_table store as points_nested_tab; --指定嵌套表变量;
-------------
declare
a_points_varray points_varray_type:=points_varray_type();
a_points_nested_table points_nested_table_type;
begin
insert into environment_data
(sample_id,points_varray,points_nested_table)
values(1,points_varray_type(point_type(3,4),point_type(3,5)), points_nested_table_type(point_type(1,2),point_type(5,9)));
a_points_varray:=points_varray_type(point_type(1,2),point_type(2,3));
a_points_nested_table:=points_nested_table_type(point_type(10,11));
insert into environment_data(sample_id,points_varray,points_nested_table)
values(2,a_points_varray,a_points_nested_table);
select points_varray,points_nested_table into
a_points_varray,a_points_nested_table from environment_data
where sample_id=1;
end;
---------------------------对象
create or replace type points_object_type as object(
points points_nested_table_type,
member function sample_size return number;
member function point_text return varchar2;
member function min_x return number;
member function max_x return number,
member function avg_x return number,
member function best_point return point_type,
member procedure add_to(v point_type));
create or replace type body points_object_type as object(
member function sample_size return number is
begin
return points.count;
end;
member function point_text return varchar2 is
s varchar2(1000);
begin
for i in 1..points.count loop
s:=s||' ('||point(i).x||','||point(i).y||')';
end loop;
return s;
end;
member function min_x return number is
result number:=null;
begin
for i in 1..points.count loop
result:=least(nvl(result,point(i).x),point(i).x);
end loop;
end;
member function max_x return number is
result number:=null;
begin
for i in 1..points.count loop
result:=greatest(nvl(result,point(i).x),point(i).x);
end loop;
end;
member function avg_x return number is
result number:=0;
begin
for i in 1..points.count loop
result:=result+point(i).x;
end loop;
return result/points.count;
end;
member function best_point return point_type is
pt point_type;
begin
pt:=point_type(point(1).x,points(points.count).y);
return pt;
end;
member procedure add_to(v point_type) is
begin
points.extend; --表扩展
points(points.count):=v;
exception when others then
points:=points_nested_table_type(v); --返回一个?
end;
end;
------------------------- 使用对象
create table test_data(
sample_id number(3),
points_object points_object_type)
nested table
points_object.points store as points_object_tab;
declare
point_obj points_object_type:=points_obejct_type(
points_nested_table_type());
best_point point_type;
begin
point_obj.add_to(point_type(2,3));
point_obj.add_to(point_type(6,1));
point_obj.add_to(point_type(7,3));
point_obj.add_to(point_type(8,3));
insert into test_data(sample_id,points_object)
values(1,point_obj);
select points_object into point_obj from
test_data where sample_id=1;
dbms_output.put_line(point_obj.min_x);
dbms_output.put_line(point_obj.max_x);
dbms_output.put_line(point_obj.avg_x);
best_point:=point_obj.best_point;
dbms_output.put_line('x='||best_point.x||',y='||best_point.y);
end;
-------------------blob操作 大对象
blob 二进制大对象 图像
clob 字符对象
bfile 用于引用文件
create table doc(
doc_id number(5) primary key,
document clob);
insert into doc(doc_id,document) values(1,empty_clob()); --空文档
--创建逻辑连接 地位物理文件位置 create any directory权限
create or replace directory sample_docs as 'd:\docs';
----------------- 写文件
declare
the_bfile bfile;
the_clob clob;
bfile_size pls_integer;
clob_size pls_integer;
v_directory varchar2(30):='SAMPLE_DOCS';
v_filename varchar2(30):='users_manual.pdf';
begin
the_bfile:=bfilename(v_directory,v_filename); --bfile 逻辑路径获取
select document into the_clob from doc where doc_id=1 --clob
for update of doc.document nowait; --clob
dbms_lob.open(the_clob,dbms_lob.lob_readwrite); --open clob
dbms_lob.fileopen(the_bfile,dbms_lob.file_readonly);--open bfile
bfile_size:=dbms_lob.getlength(the_bfile);
dbms_lob.loadfromfile(the_clob,the_bfile,bfile_size); --load to clob
clob_size:=dbms_lob.getlength(the_clob);
dbms_lob.fileclose(the_bfile);--close
dbms_lob.close(the_clob);
commit;
end;
---------------------读取clob
declare
the_clob clob;
clob_size pls_integer;
max_size pls_integer:=50;
amount_to_read pls_integer;
offset pls_integer:=1;
vbuf varchar2(100):=null;
begin
select document into the_clob from doc where doc_id=1; --clob
--dbms_lob.close(the_clob);
dbms_lob.open(the_clob,dbms_lob.lob_readonly);--open clob
clob_size:=dbms_lob.getlength(the_clob);
amount_to_read:=lease(clob_size,max_size);
dbms_lob.read(the_clob,amount_to_read,offset,vbuf); --read clob 缓冲区要>=长度2倍?
dbms_lob.close(the_clob); --close
dbms_output.put_line(vbuf);--replace(vbuf,chr(10),'-')); --替代换行,完全输出
end;
--------------------case 语句
create table hello (a number(2));
insert into hello values(11);
declare
b integer;
begin
select case
when a<10 then 1
when a>=10 and a<20 then 2
when a>255 then 3 end
into b from hello;
dbms_output.put_line('b='||b);
end;
---------- decode
declare
b integer;
begin
select decode(a,'A',0,'B',1,2)
into b from hello;
dbms_output.put_line('b='||b);
end;
declare
name emp.ename%type;
procedure p(s varchar2) is --内部
begin
dbms_output.put_line(s);
end;
begin
name:='kevain';
case name
when 'hell' then p('a1');
when 'john' then p('a2');
when 'kevin' then p('a3');
else p('nothing!');
end case;
end;
-------------------loop
declare
counter integer:=10;
begin
loop
dbms_output.put_line(counter);
counter:=counter-1;
exit when counter=0; -- if counter=0 then exit; end if;
end loop;
end;
declare
ascii_code integer:=97;
alphabet varchar2(26):=null;
begin
while(nvl(length(alphabet),0)<26) loop
alphabet:=alphabet||chr(ascii_code);
ascii_code:=ascii_code+1;
end loop;
dbms_output.put_line(alphabet);
end;
select instr('/aa/bb/cc/dd','/',-1,1) from dual; --最后一个斜杠位置
create or replace function pad_number(n number) return varchar2 is
the_pad varchar2(3);
the_number varchar2(30):=to_char(n);
begin
select decode(instr(the_number,'.',1),0,'.00',
length(the_number)-1,'0') into the_pad
from dual;
return '$'||to_char(n)||the_pad;
end;
select next_day(trunc(sysdate),'星期六') from dual;
---------------------文件读取
create or replace function get_next_record
(file in utl_file.file_type,text out varchar2) return boolean is
begin
utl_file.get_line(file,text); --read line
return false;
exception when no_data_found then
return true;
end;
create or replace directory D_OUTPUT as 'D:\TEMP';
grant read,write on directory D_OUTPUT to testdb;
GRANT EXECUTE ON utl_file TO testdb;
declare
file utl_file.file_type;
text varchar2(1000);
end_of_file boolean:=false;
begin
file:=utl_file.fopen('SAMPLE_DOCS','test.txt','r'); --open
loop
end_of_file:=get_next_record(file,text);
exit when end_of_file;
dbms_output.put_line(text);
end loop;
utl_file.fclose(file); --close
exception
when utl_file.invalid_path then
dbms_output.put_line('Invalid Path!');
when utl_file.invalid_mode then
dbms_output.put_line('Invalid Mode!');
when utl_file.invalid_operation then
dbms_output.put_line('Invalid Operation!');
end;
分享到:
相关推荐
本章主要关注存储过程、触发器和用户定义函数。 **存储过程**是数据库中的重要组成部分,它是一个预编译的SQL代码模块,可以高效地执行特定任务,并且是可重用的。存储过程分为三种类型:用户定义存储过程、扩展...
张帆教授的这门课程涵盖了从第4章到第11章的内容,涉及了信息存储系统的基础理论、技术和实践应用。在这个压缩包中,22236-00_1-3可能是课件的组成部分,可能包括讲义、幻灯片或者其他教学材料。 信息存储与检索的...
第11章 SQL Server 2008的安全机制 第12章 备份与恢复数据库 第13章 自动化SQL Server 2008数据库 第14章 集成服务 第15章 报表服务 第16章 分析服务 第17章 使用.NET 访问SQL Server 2008 第18章 监视SQL Server ...
在第11章的练习中,你可能会接触到如何使用STL容器存储和操作数据,以及如何使用STL算法进行排序、查找等操作。 3. **面向对象编程(OOP)**:C++是一种支持面向对象编程的语言,第11章可能涉及继承、多态和封装等...
第18章 主从复制.assets第17章 其它数据库日志.assets第16章 多版本并发控制,assets第15章 锁,assets第14章 MySQL事务日志.assets第13章 事务基础知识.assets第12章 数据库其它调优策略,assets第11章 数据库的设计...
第四十七章:ISCSI 企业共享存储方案 本章节主要讲述了企业共享存储方案中的ISCSI技术,涵盖了存储概述、存储分类、ISCSI概念、ISCSI技术的应用等内容。通过本章节的学习,读者将了解到企业存储应用内容、存储分类...
在这一章,你将学习如何定义和实例化类,理解类和对象的关系,以及如何使用构造函数和析构函数。此外,还将深入学习C#中的控制流语句,如if条件判断、switch语句、循环(for、while、foreach)以及异常处理机制。 ...
最后,第十五章介绍了ONTAP的发布模型,这有助于用户了解软件更新和版本控制的过程。第十六章则提供了进一步学习和获取支持的资源。 综上所述,《联想DM存储设备 NetApp设备ONTAP概念指南》是一份全面的技术资料,...
《疯狂Android讲义第二版》是一本深入浅出的Android开发教程,其光盘源码涵盖了从第十一章到第十五章的重要知识点。这些章节主要涉及Android应用开发的高级技术,包括用户界面优化、多媒体处理、网络编程、数据存储...
第十一章至第十三章则关注数据库的安全性和完整性,包括访问控制、权限管理以及触发器和存储过程的使用。习题可能涉及如何设置用户权限,或者设计能够确保数据完整性的触发器。 最后,第十四章可能涉及数据库的备份...
【MySQL8.0学习第一章】 在本章的学习中,我们将深入了解MySQL数据库系统,这是一个广泛应用于各种行业的关系型数据库管理系统(RDBMS)。首先,我们从基础出发,了解数据库的概论,包括数据、数据库、数据库管理...
第11章 PL/SQL语言基础 第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL...
### 数据结构第十一章知识点详解 #### 一、章节概述 本章节主要介绍了高级线性表中的几个核心概念和技术,包括多维数组、广义表以及存储管理技术。通过学习这些内容,我们可以更好地理解如何有效地组织和处理复杂的...
第11章 数据仓库和数据智能 数据仓库和数据智能是指对数据的存储和分析,以支持业务决策和intelligence。这一章节主要介绍了数据仓库和数据智能的定义、重要性、方法和工具。 第12章 元数据管理 元数据管理是指对...
【函数】在C语言中,函数是一段可重复使用的代码块,用于执行特定任务。例如,`void f()`定义了一个名为`f`的无返回值的函数。在`main()`函数中,`f()`被调用,但需要注意的是,函数内的变量只在其定义的函数作用域...
这本书的第十一章至十七章涵盖了多个关键领域,包括进程与线程管理、DLL开发与系统编程、网络编程、数据库操作、数字图像处理以及多媒体开发,这些都是现代软件开发中的重要组成部分。 第十一章《进程与线程》是...
这一章可能涵盖了XML布局文件的创建,包括线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)和网格布局(GridLayout)等基本布局类型。此外,还可能讲解了如何使用View和 ViewGroup,...
通过【elevenWork】这个文件名,我们可以推测这可能是第十一章的工作文件或练习,其中可能包含练习代码、测试用例和解决方案,供学习者动手实践和巩固所学知识。 总的来说,ACCP8.0S2-Y2的第十一章内容全面且深入,...
《学习OpenCV》第十一章主要讲解了相机标定的过程,这是计算机视觉领域的一个关键步骤,用于纠正由相机镜头引起的图像畸变,并获取相机的内在参数。本章的可运行代码提供了实现这一过程的实际示例,帮助读者深入理解...