PL/SQL是一种面向过程的类似Pascal的语言,是Oracle公司对SQL语言的功能的扩展,它是将过程性结构与oracle SQL无缝的集成在一起而产生的一种结构化的强有力的语言,是一种高级数据库程序设计语言。
1、程序开始
一个完整的程序体
if判断
declare --声明变量 变量名 类型
a number:=5 ; --声明时赋值
b number:=2;
c number;
--在plsql中可以使用SQL里面的类型以保证类型一致
-- user_name user.user_name%type;--该变量与数据库user表中user_name字段属性一致
begin ---- 程序开始
if a>0 and b>0 then -- if条件
c:=a+b; --赋值操作使用:=
elsif a<0 and b>0 then
c:=a*b;
else
c:=a-b;
dbms_output.pput_line(c) ; --控制台输出
end if;---一定要end if
exception when others then --异常的捕获
dbms_output.pput_line('error') ;
end;
2、循环控制语句
declare
a number;
begin
for i in 1..3 loop
dbms_output.pput_line(i) ;
end loop;--end loop 不能少
exception when others then
dbms_output.pput_line('error') ;
end;
输出结果
因为plsql是一门增强的SQL语言,所以,plsql可以直接用for循环遍历SQL语句查询出来的结果(遍历游标)
declare
begin
for emp in (select * from employees e where e.employee_id<110) loop
dbms_output.put_line('id: '||emp.employee_id||'fname: '||emp.first_name) ;
end loop;
exception when others then
dbms_output.pput_line('error') ;
end;
结果如下:
3、plsql中数组的定义
在plsql中并没有严格的数组这个定义,我们可以将数组理解成为一个表,每条记录相当于数组的一行,多少条记录就有多少行,在plsql中有两种类型,table和record,table只能装一列,而record只能装一行多列,实现数组可以在table里面装record,两者结合就是一个数组
--这里以hr下的employees表为例
declare
ind number:=1;
type type_record is record(
ename employees.first_name%type,
eemail employees.email%type,
esalary employees.salary%type
); ---到这里就定义出了一条记录类型,三个字段分别是ename,eemail,esalary;
my_record type_record; --这个地方是声明一个my_record变量是_record 类型
type type_table is table of type_record index by binary_integer;
--定义一个table类型,该类型里面只能存储_record类型的记录 ,int索引
my_table type_table;--声明my_table变量为_table类型;
begin
for emp in(select e.first_name,e.email,e.salary
from employees e where e.employee_id <110) loop
--为记录赋值
my_record.ename:=emp.first_name;
my_record.eemail:=emp.email;
my_record.esalary:=emp.salary;
--将记录存到table里面
my_table(ind):=my_record;
ind:=ind+1;
end loop;------------------循环存数据
---------------循环输出数据
for i in 1..my_table.count loop
dbms_output.put_line('employee_name: ' || my_table(i).ename || ' ' || 'email: ' ||
my_table(i).eemail || 'salary: ' || my_table(i).esalary );
end loop;
exception when others then
dbms_output.put_line('error');
end;
输出结果如下
嗯。。暂时就先想到这么多,后面的想到了再写 。