JAVA学习笔记(PL/SQL)
1.1什么是PL/SQL
PL/SQL(ProceduralLanguage/SQL)是Oracle在标准SQL的基础上增加了过程化处理,把DML和select语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作,实现复杂的功能或者计算的程序语言。
扩展:变量和类型、控制结构、过程与函数。
注意事项:
java中是写方法,把复杂的业务逻辑写入方法中,再调用方法。
PL/SQL是写过程、函数,把复杂的业务逻辑写入过程、函数中,再调用它们。
1.2PL/SQL程序结构
PL/SQL块:包含三部分,声明部分:declare;执行部分:begin;异常处理:exceptioneg1:语法
declare
v_AccountIDnumber(5):=1001;
v_RealNamevarchar(20);
begin
selectreal_nameinfov_RealNamefromaccountwhereid=v_AccountID;
exception
when on_data_foundthen
insertinfoFee_Log(desrc)values('Account1001 dece notexit!')commin;
end;--(不需要理解代码的具体含义!)
注意事项:最简写的方式为begin end;
eg2:打印HelloWorld
begin
dbms_output.put_line('HelloWorld');
end;
注意事项:
dbms_output是系统提供的包package,包含多个过程、函数。其中的过程put_line实现的是输出功能,只有一个参数,只能为“字符类型”(日期和数值也可,系统自动转换!布尔类型不行!但java中可以),用于接收需输出的字符串。在sql工作表子窗口中可以调用存储过程。
想要在屏幕上输出需要写:setserveroutputon(在begin上面写)。
如何调用过程:begin包名.过程名();所有过程都是没有返回值的,即java中的void。
1.3 PL/SQL运行过程
如下图所示:
1.4注释
增加可阅读性,使程序更容易理解。编译时将被忽略。
1)单行注释:由两个连字符“--”开始,到行尾都是注释。
2)多行注释:由“/*”开头,由“*/”结尾。
2.1数据类型
标量类型:数字型、字符型、日期型、布尔型;可以直接用的。复合类型:record、associativearray、nestedtable、varray;需要自己去定义的。
2.2标量类型
1)数字类型:①number②number的子类型dec(38)、float(38)、real(18)…③binary_integer(只能在PL/SQL中用),按10进制赋值,但存的时候会换成2进制存。优势是计算快。
2)字符类型:①varchar2、varchar(长度:1.~32767)②string(只能在PL/SQL中用,长度:1.~32767)③char(长度:1~32767)④long
3)日期类型:date
4)布尔类型:boolean
①用于存储逻辑值true,false,null(java中只有true,false)。
②不能向数据库中插入boolean类型的数据。
③不能将列值保存到boolean变量中。
④只能对boolean变量执行逻辑操作。
2.3变量声明
1)语法:var_nametype[constant][notnull][:=value];
注意事项:PL/SQL规定没有初始化的变量为null。
2)直接定义类型
declare
v_n1 number:=1;--赋初值要有“冒号”,PL/SQL中赋值和等号是区分开的
v_c1varchar2(10);
v_d1 date:=sysdate;--sysdate是函数,有返回值
begin
注意事项:
PL/SQL中没返回值的叫过程;有返回值的叫函数,且必须有指向(要么打印出,要么赋值给变量)。所以,过程和函数的调用是不一样的。
java中的方法一种没有返回值,一种是有返回值;有返回值的如果没返回,则会丢弃。但PL/SQL不行!
3)%type方式:变量具有与数据库的表中的某列或其他变量相同的类型。
eg1:三种声明方式
declarev_RealNamevarchar2(20);
declarev_RealNameaccount.real_name%type;declarev_TempVarnumber(7,3)notnull:=12.3;
v_AnotherVarv_TempVar%type:=12.3;
eg2:定义变量,打印系统时间,并输出它们的值
setserveroutputon declare
v_d1 date:=sysdate;
v_c1varchar2(20);
begin
v_c1:=to_char(v_d1,'yyyymmdd hh24:mi:ss');
dbms_output.put_line('Currentdateis'||v_c1);
--put_line只有一个参数,所以必须拼接!
end;
4)复合类型
record类型、集合类型。
�3.1条件语句
1)if语句
方式一:
if then
statement;
endif;//最简写的方式方式二:
if then
statement;
else
statement1;
end if;
方式三:
if boolean_expr then
statement;
elsif boolean_expr then
statement1;
else
statement2;
常用数据库对象简介(函数存储过程包)
函数是Oracle中的一个可以单独存在的数据库对象,主要用于封装一些业务处理逻辑,同时在处理完成相关逻辑之后必须返回一个结果值
语法格式说明:
a. 创建函数的关键字为 FUNCTION
b. 函数名可以自定义,不能与系统已有的冲突
c. 函数的参数可以根据需要有多个,也可以没有参数
d. 函数一定有返回值,而且返回值的类型和函数的定义中的返回值类型必须保持一致
与函数类似,存储过程也是一种可以单独存储在Oracle数据库中的一种对象,也是用于封装一些业务处理逻辑,只是存储过程没有返回值,但是有输出
语法格式说明:
e. 创建存储过程的关键字为 PROCEDURE
f. 存储过程名可以自定义,不能与系统已有的冲突
g. 存储过程的参数可以根据需要有多个,也可以没有参数,其中 IN 或者OUT是用于标识该参数是输入参数还是输出参数的
h. 存储过程没有返回值,但是可以有输出参数
函数和存储过程的区别
函数和存储过程都是数据库中的数据对象,可以单独存储;
函数和存储过程都是可以处理相关的业务逻辑;
函数和存储过程都是可以存在于PLSQL代码块中的
函数有返回值,而存储过程没有;
存储过程有输出参数,而函数没有;
函数可以存在于SQL查询语句中,而存储过程不可以
包
包 PACKAGE,也是数据库中的一种对象,一般主要用来管理一组函数和存储过程的单元,我们可以把某一类型或者某一个功能模块的函数和存储过程统一定义在一个包中,便于维护和管理