PL/SQL的标准语法及使用示例

pl/sql(procedural language/sql)

是一种过程化语言,pl/sql是oracle的专用语言,它是对标准sql语言的扩展,它允许在其内部嵌套普通的sql语句,也可以定义变量和控制程序的执行流程,这样就将sql语句的数据操纵和查询能力与pl/sql的过程处理能力结合在一起了

标准pl/sql块的语法格式:

[declare] –声明部分,可选

begin –执行部分,必须

[exception] –异常处理部分,可选

end

定义变量和常量

1.定义变量<变量名> <数据类型> [(长度):=<初始值>];//pl/sql的赋值符号为:=

2.定义常量<常量名> constant <数据类型>:=<常量值>;

基本数据类型

1.数值类型:常用的是number(m,n)m为总的位数,n为小数位数

2.字符类型:主要包括varchar2、char、long、nchar和nvarchar2等。这些类型的变量用来存储字符串或字符数据。

3.日期类型:date类型,共七个字节包括世纪、年、月、天、小时、分钟和秒

4.布尔类型:boolean,值有true、false或null

特殊类型:

1.%type

使用这个类型关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名后

例如:

在scott模式下,使用%type类型的变量输出emp表中编号为7369的员工姓名和职务信息

set serveroutput on

declare

var_ename emp.ename%type;

var_job emp.job%type;

begin

select ename,job into var_ename,var_job from emp where empno=7369;

dbms_output.put_line(‘编号为7369的员工姓名为:’||var_ename||’,职位为’||var_job);

end;

/

2. record

record类型也称作“记录类型”,使用该类型的变量可以存储由多个列值组成的一行数据。在声明记录类型变量之前,首先需要定义记录类型,然后才可以声明记录类型的变量。记录类型是一种结构化的数据类型,它使用type语句进行定义,在记录类型的定义结构中包含成员变量及其数据类型

例如:

声明一个记录类型emp_type,然后使用该类型的变量存储emp表中编号为7369

员工的姓名、职务、工资信息,并输出这条记录信息。

declare

type emp_type is record(

var_ename emp.ename%type,

var_job emp.job%type,

var_sal emp.sal%type

);

emp_info emp_type;

begin

select ename,job,sal into emp_info from emp where empno=7369;

dbms_output.put_line(‘编号为7369员工姓名:’

||emp_info.var_ename||’,职务:’||emp_info.var_job||

‘工资是:’||emp_info.var_sal);

end;

3.%rowtype

%rowtype类型的变量结合了“%type类型”和record类型变量的优点,它可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据

例如:

声明一个%rowtype类型的变量rowvar_emp,然后使用该变量存储emp表中的一行数据。

declare

rowvar_emp emp%rowtype;

begin

select * into rowvar_emp from emp where empno=7369;

dbms_output.put_line(‘编号为7369的员工姓名为:’||rowvar_emp.ename||

‘,雇佣日期为:’||rowvar_emp.hiredate||’工资为:’||rowvar_emp.sal);

end;

/

选择语句:

1.使用if…then语句比较两个字符串变量的长度,并输出比较结果。

declare

var_str1 varchar2(20);

var_str2 varchar2(20);

begin

var_str1:=’hello’;

var_str2:=’oracle is good’;

if length(var_str1) dbms_output.put_line(‘字符串”‘||var_str1||'”的长度小于”‘||var_str2||'”‘);

end if;

end;

/

2.通过if..else语句实现只有年龄大于等于65岁,才可以申请退休,否则程序会提示不可以

申请退休。

declare

age number:=15;

begin

if age>=65 then

dbms_output.put_line(‘您可以申请退休’);

else

dbms_output.put_line(‘年龄不到,不能申请退休!’);

end if;

end;

/

3.指定一个月份数值,然后使用if…then..elsif语句判断它所属的季节,并

输出季节信息,代码如下。

declare

month int:=4;

begin

if month>=1 and month<=3 then

dbms_output.put_line(‘春天’);

elsif month>=4 and month<=6 then

dbms_output.put_line(‘夏日炎炎’);

elsif month>=7 and month<=9 then

dbms_output.put_line(‘秋天’);

else

dbms_output.put_line(‘冬天很冷’);

end if;

end;

/

4.使用loop语句求前100个自然数的和,并输出到屏幕。

declare

i int:=0;

sum_i int:=0;

begin

loop

i:=i+1;

sum_i:=sum_i+i;

exit when i=100;//结束条件

end loop;

dbms_output.put_line(‘前100个自然数的和是:’||sum_i);

end;

/

5.使用while语句求前100个自然数的和,并输出到屏幕。

declare

i int:=0;

sum_i int:=0;

begin

while i<=99 loop//这个i<99是进入循环的条件

i:=i+1;

sum_i:=sum_i+i;

end loop;

dbms_output.put_line(‘前100个自然数的和是:’||sum_i);

end;

/

6.使用for语句求前100个自然数中偶数之和,并输出到屏幕。

declare

sum_i int:=0;

begin

for i in 1..100 loop

if mod(i,2)=0 then//这是求余函数

sum_i:=i+sum_i;

end if;

end loop;

dbms_output.put_line(‘前100个自然数的和是:’||sum_i);

end;

/

7.指定一个季度数值,然后使用case语句判断它所包含的月份信息并输出。

declare

season varchar2(20):=’夏天’;

begin

case season

when ‘春天’ then

dbms_output.put_line(‘包含1、2、3月份’);

when ‘夏天’ then

dbms_output.put_line(‘包含4、5、6月份’);

when ‘秋天’ then

dbms_output.put_line(‘包含7、8、9月份’);

when ‘冬天’ then

dbms_output.put_line(‘包含10、11、12月份’);

else

dbms_output.put_line(‘未知季节!’);

end case;

end;

/

内置函数:

测试系统函数可以使用

select ***(函数) from dual;语句其中dual是体统临时表

ascii(c)函数 :a—97

chr(i)函数 : 97—a

concat(s1,s2):函数连接字符串,返回新字符串

initcap(s): 函数 将每个单词的首字母大写

abs(n):返回n的绝对值

add_months(d,i):返回日期d加上i个月之后的结果。其中,i为任意整数

last_day(d):返回包含日期d月份的最后一天

sysdate:系统当前时间

to_char(x[,format]):该函数实现将表达式转换为字符串,format表示字符串格式

to_date(s[,format[lan]]):该函数将字符串s转换成date类型,format表示字符串格式,lan表示所使用的语言

avg:平均值

count():行数

power(a,b)a的b次方

round(a,b):给a保留b为小数并四舍五入

pl/sql存储过程

存储过程是一种命名的pl/sql程序块

存储过程保存在中,因为是已经编译好的代码,所以在被调用时,其执行效率非常高

存储过程的参数种类:

1. in 输入参数(默认)

2. out 输出参数

3. in out 输入输出参数

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐