PL/SQL基础
SQL语句适用于所有的数据库,比如sql99就是所有所有数据库都遵循的一套语法。PL/SQL是oracle数据特有的语法。只适用于PL/SQL。以下是PL/SQL的一些基本知识。
1、plsql过程化处理,是将DML和select语句封装在plsql过程性单元中。
2、PL/SQL的注释方式有两种:单行注释用”—“两条横线来表示,多行注释用/**/ 来表示。
3、PL/SQL的基本语法结构是:
declare(表示说明部分,如果没有说明部分declare可以不写)
说明部分(对变量、光标、例外的声明)
begin
DML/TCL(业务的处理语句)
exception
例外(就是我们在其他语言说所说的异常异常)
end;
/(/表示语句块的结束,不要忘记写)
4、在PL/SQL中使用的输出语句dbms_output.putput_line();中 dbms_output是oracle提供给我们的程序包中的其中一个。
5、Oracle在PL/SQL中有提供给我们程序包,程序包中有很多的方法。通过命令行:desc 程序包名 可以查看程序包里面包括的方法。
6、基本数据类型的声明变量定义是变量名在前,类型在后
例如:mysum number(10) := 100;
tip varchar2(20) := '结果是';
7、PL/SQL中变量类型有:char、varchar(2)、date、number、boolean、long等
其中number类型用来定义整数;有资料说varchar(2)和varchar相同含义,但是PL/SQL中并没有出varchar类型,以后会不会出不一定。
8、PL/SQL中变量的类型有两种
1)引用型变量:就是使用数据库表中字段变量的类型(已有变量类型)例如:pname EMP.ENAME%type;
好处:声明的变量不需要知道引用来的变量类型,如果引用来的类型改变了,声明的变量跟着改变就可以了
2记录型变量:是取表中一行的类型来作为声明的变量的类型
例如:emp_rec.emp%rowtype;其中rec代表记录的意思、emp_rec是变量的名称、emp%rowtype是变量类型;
如果引用一行中某一个字段的类型作为声明变量的类型这样做就可以了emp_rec.ename:='ADAMS';(‘ADAMS’是表中的字段名)
9、PL/SQL两种赋值方式:
1):= 直接给变量赋值
2)into关键字(into关键字用在通过sql语句获取值后并赋值给声明的变量)
*注意:1)into后面变量的顺序要和前面查询变量的顺序对应;2)PL/SQL中=表示判断
10、从键盘输入数字方式:
1)page number(4):=&age;
2)在declare之前写:accept num prompt’请输入一个数字’(num是地址值含义是:在该地址上保存了输入的值)在declare中写:pnum number = #
11、PL/SQL中条件语句:1)if then…end if ; 2)if then…else…end if ; 3)if then…elsif then…else…endif。
12、PL/SQL三种循环:
1)loop….end loop ;
2)for i in 1..10 loop …..endloop;
3)While循环;
建议使用loop循环因为其控制光标比较简单
13、常见例外:Zero_Divide(被零除)
Value_error(算术或转换错误)
Timeout_on_resource(在等待资源是发生超时)
No_data_found(没有找到数据)
Too_many_rows(select…into语句匹配多个行)
14、光标
语法:Cursor 光标名[(参数名 数据类型[,参数名 数据类型] ) ]
ISSELECT 语句;
属性(光标的属性都以%开头):
1、%found 如果fetch语句取到值,值为true否则为fasle
2、%notfound如果fetch语句没有取到值,返回true否则为false
(1,2写法为:光标名%found(%notfound)
3、%isopen 判断光标是否打开,如果打开的值为true否则为false
4、%rowcount 影响的行数
光标数的限制:默认情况下,oracle数据库只允许在同一个会话中,打开300个光标
修改光标数的限制:alter system(表示修改系统的参数设置)set open_cursors=所需要的光标数 scope=both;(scpoe是范围有三个值:both(同时更改memory、spfile)、memory(只更改当前实例,不更改参数文件
)、spfile(数据库需要重启))
使用光标步骤:
1、定义光标 cursor 光标名 is select 字段名 from 表名;
2、为光标定义对应变量
3、打开光标(open 光标名)
4、关闭光标(close 光标名)
从光标中取值: fetch 光标名 into 变量名; (取一行到变量中)
Fetch作用:1、把当前指针指向的记录返回;2、指针移向下一条记录,并返回数据;
15、存储过程
1)创建:create[or replace] procedure hello as ^^^1
2)删除:dropprocedure hello;
3)调用:方式一sql调用:exec hello;
方式二plsql调用 begin hello end;