Oracle9i 基础知识SQL.docx
- 文档编号:11156402
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:12
- 大小:32.83KB
Oracle9i 基础知识SQL.docx
《Oracle9i 基础知识SQL.docx》由会员分享,可在线阅读,更多相关《Oracle9i 基础知识SQL.docx(12页珍藏版)》请在冰豆网上搜索。
Oracle9i基础知识SQL
Oracle9i基础知识-SQL
简单地说,数据库(Database,简称DB)是一个提供数据的基地。
它能保存数据并让用户从它这里访问有用的数据。
确切地说,数据库是某个企事业单位存在计算机内的一组业务数据,它能以最佳方式、最少的数据重复被这个单位中的所有可能的应用系统所共享。
数据库中的业务数据是以一定的组织方式存储在一起的相互有关的数据整体。
两种类型的SQL
DDL(DataDefinitionLanguage)
数据定义语言是SQL中定义数据库中数据结构的语言。
顾名思义,就是帮助用户定义、创建表和权限的SQL语句。
DML(DataManipulationLanguage)
数据操纵语言允许用户对数据内容进行增、删、改等操作。
PL/SQL
PL/SQL概述
PL/SQL是Oracle对SQL规范的扩展,是一种块结构语言,包括一整套的数据类型、条件结构、循环结构和异常处理结构。
其优点大致如下:
1.PL/SQL是一种高性能的基于事务处理的语言,支持所有数据处理命令,支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型。
2.PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,具有很好的可重用性。
3.可以将功能划分为不同的逻辑代码块编程的模块化为应用程序开发环境提供了更大的灵活性。
4.对于SQL,ORACLE必须在同一时间处理每一条SQL语句,每一个独立的调用都必须被Oracle服务器处理,占用大量的服务器时间,并导致网络拥挤。
而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。
PL/SQL块类型
PL/SQL块主要有两种类型,即命名块和匿名块:
匿名块
以DECLARE或BEGIN开始,每次使用时都要进行编译,除此之外,该类块不在数据库中存储并且不能直接从其他的PL/SQL块中调用。
命名块
没有匿名块的限制,独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块,如过程,函数,包和触发器都属于命名块。
PL/SQL块结构
PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL程序包含了一个或多个逻辑块,每个块都可以划分为三个部分:
DECLARE
变量说明部分;包括定义的变量和其它的对象(如常量和指针),游标
也在这里定义;可选。
BEGIN
执行语句部分;PL/SQL块中的指令部分,所有的可执行语句都放在这
里,其他的PL/SQL块也可以放在这一部分;必选。
EXCEPTION
异常处理部分;包含如何处理指定的错误并按用户的定义进行处理;可
选。
END;
例:
createtablet_leafinfor
(
webleafdirindexnumber(10)notnull,
leafdirindexnumber(10),
tonecodevarchar2(24)notnull
);
declare
v_intint;
v_errcodenumber;
v_errmsgvarchar2(200);
begin
v_int:
=1;
whilev_int<=1000loop
insertintot_leafinfor(
webleafdirindex,
leafdirindex,
tonecode)
values(v_int,-1,'712568000001');
v_int:
=v_int+1;
commit;
endloop;
exception
whenothersthen
v_errcode:
=sqlcode;
v_errmsg:
=substr(sqlerrm,1,200);
dbms_output.put_line(v_errmsg);
end;
PL/SQL块程序
过程(PROCEDURE)
CREATE[ORREPLACE]PROCEDUREname
[(parameter[,parameter,...])]
IS
[localdeclarations]
BEGIN
executestatements
EXCEPTION
[exceptionhandlers]
END[name];
函数(FUNCTION)
CREATE[ORREPLACE]FUNCTIONname
[{parameter[,parameter,...])]RETURNdatatypes
IS
[localdeclarations]
BEGIN
executestatements
EXCEPTION
[exceptionhandlers]
END[name];
触发器(TRIGGER)
CREATE[ORREPLACE]TRIGGER[schema.]Trigger_name
{BEFORE|AFTER}
{DELETE|INSERT|UPDATE[OFcolumn[,column]...]}
ON[schema.]table
[[REFERENCING{OLD[AS]old[NEW[AS]new]
|NEW[AS]new[OLD[AS]old]}]
FOREACHROW
DECLARE
[localdeclarations]
BEGIN
executestatements
EXCEPTION
[exceptionhandlers]
END;
包(PACKAGE)
包是由存储在一起的相关对象组成的PL/SQL结构。
包有两个独立的部分,即说明部分和包体,这两部分独立地存储在数据字典中。
CREATE[ORREPLACE]PACKAGEpackage_name
AS
PROCEDUREprocedure1(global_variable1datatype,...);
PROCEDUREprocedure2(global_variable1datatype,...);
ENDpackage_name;
CREATE[ORREPLACE]PACKAGEBODYpackage_nameAS
PROCEDUREprocedure1(global_variable1datatype,...)IS
BEGIN
...
ENDprocedure1;
PROCEDUREprocedure2(global_variable1datatype,...)IS
BEGIN
...
ENDprocedure2;
ENDpackage_name;
ORACLE游标
游标是指向数据库查询结果集的指针,一个游标结果集是通过执行SELECT查询来建立的,PL/SQL中可以使用游标对结果集逐行处理。
游标的另一个常见的用法是保存并返回查询结果集。
报表常使用游标把统计结果返回给报表工具并展示。
游标分为显式游标(ExplicitCursor)和隐式游标(ImplicitCursor),通常所说的游标如果不特别指明均指显式游标。
隐式游标
隐式游标用PL/SQL中单条记录的查询,须与INTO子句一起使用,查询的返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中。
当查询开始时隐式游标打开,查询结束时隐式游标自动关闭。
declare
v_webleafdirindexnumber(10);
v_tonecodevarchar2(24);
begin
selectwebleafdirindex,tonecode
intov_webleafdirindex,v_tonecode
fromt_leafinfor;
dbms_output.put_line(to_char(v_webleafdirindex)||'.'||v_tonecode);
exception
whenno_data_foundthen
dbms_output.put_line('nodatafound');
whentoo_many_rowsthen
dbms_output.put_line('toomanyrows');
end;
显式游标
5.当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用SELECTINTO语句。
6.显式游标在PL/SQL块的声明部分声明,在执行部分或异常处理部分打开,取数据,关闭。
使用loop循环语句的游标:
declare
vnamevarchar2(40);--vnameall_views.view_name%type;
cursorc1is
selectview_name
fromall_views
whererownum<=10
orderby1;
begin
openc1;
fetchc1
intovname;
whilec1%foundloop
dbms_output.put_line(to_char(c1%rowcount)||''||vname;
fetchc1intovname;
endloop;
closec1;
end;
使用for循环语句的游标:
declare
vnamevarchar2(40);--vnameall_views.view_name%type;
cursorc1is
selectview_name
fromall_views
whererownum<=10
orderby1;
begin
foriinc1loop
dbms_output.put_line(i.view_name);
endloop;
closec1;
exception
whenothersthen
ifc1%isopenthen
closec1;
endif;
end;
PL/SQL其它常见用法
判断表中有无数据,有则更新,无则插入
updatet_abc
setname=v_name
whereid=v_id;
ifsql%rowcount=0then
insertintot_abc(id,name)
values(id,name);
endif;
commit;
PL/SQL中使用DDL语句
createorreplaceproceduresp_rpt_delrpttmptable
as
begin
executeimmediate'truncatetablet_tmp_agentedid';
executeimmediate'truncatetablet_tmp_agentid';
executeimmediate'truncatetablet_tmp_city';
end;
用游标返回结果集
createorreplacepackagepack_serviceis
typet_retdatasetisrefcursor;
typet_typeistableofvarchar2(100)indexbybinary_integer;
endpack_service;
createorreplaceproceduresp_rpt_kzyytstat(
rcursorinoutpack_service.t_retdataset)
as
begin
openrcursorfor
selectdept_no,dept_namefromdept;
exception
whenothersthen
openrcursorfor
select0,'error'fromdual;
end;
动态SQL
createorreplaceproceduresp_rpt_calllist6900(
rcursorinoutxpp_db170.t_retdataset,
istartdatedate,
ienddatedate,
icall6900varchar2,)
as
vsqlvarchar2(2000):
='';
begin
vsql:
=vsql||'selecta.callerno,';
vsql:
=vsql||'a.calleeno,';
vsql:
=vsql||'a.calltime';
vsql:
=vsql||'fromt_daylog_calllog6900a';
vsql:
=vsql||'wherea.calltime>=:
startdate';
vsql:
=vsql||'anda.calltime<:
enddate';
ificall6900<>'0'then
vsql:
=vsql||'anda.call6900like'''||icall6900||'%''';
endif;
openrcursorforvsqlusingistartdate,ienddate;
endsp_rpt_calllist6900;
数组
declare
typearray_typeis
tableofnumber
indexbybinary_integer;
my_arrayarray_type;
begin
foriin1..10loop
my_array(i):
=i*2;
endloop;
foriin1..10loop
dbms_output.put_line(to_char(my_array(i)));
endloop;
end;
数据库连接
7.DATABASELINK使物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单一的大型数据库;
8.必须首先在建立链接的数据库上设置链接字符串,即配置一个远程数据库的本地网络服务名;
9.最好把global_name改为false,否则数据库连接名要和目标数据库的名称一样。
--创建数据库连接
create[public]databaselinklinkname
connecttousernameidentifiedbypassword
using‘connectstring’
--使用数据库连接
select*fromtable1@linkname;
序列
sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
createsequenceemp_sequence
incrementby1--每次加几个
startwith1--从1开始计数
nomaxvalue--不设置最大值
nocycle--一直累加,不循环
cache10;
增加sequence的当前值,然后返回sequence值:
selectemp_sequence.nextvalfromdual;
主要内容回顾
语句块
游标
序列
数据库连接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle9i 基础知识SQL 基础知识 SQL