使用pl/sql编程
Sql 结构化查询语言
执行一条语句,与数据库操作一次
Plsql 过程化语言/结构化查询语言 是一种可移植的高性能事务处理程序,支持sql和面向对象编程
支持多条语句同时执行(sql和plsql语句),减少了与数据库的访问频率
组成部分:
declare《可选》
定义部分
begin
执行部分
exception 《可选》
异常处理部分
end;
Declare
v_name vachar2(20) : = ‘咋的’ ; - - 变量 : = 赋值
v_age number(3); - - 未赋值,没有值
v_age2 number(3) := 5;
v_num constant number(10) : = 456; - -常量 ,不能修改 用constant赋值为常量
Begin
dbms_output.put_line(v_name || ’123’); - - 输出
dbms_output.put_line(v_name || v_age);
dbms_output.put_line(v_age+v_age2);
End ;
declare
v_score number(3) : =‘&input_score’ ;
Begin
dbms_output.put_line(‘成绩是:’ || v_score);
End ;
- -圆的面积
Declare
v_r number(3,2):=&input_r;
v_pi constant number(6,5):=3.14; - -常量
v_str varchar2(20):=‘&input_str’;
Begin
dbms_output.put_line(v_pi);
dbms_output.put_line(‘面积是:’||v_r*v_r*v_pi);
End;
- -通过select into语句给变量赋值
- -select name,age from rj192 where id=3;- -一条结果
- - %type 与表中字段或其他类型和长度相同
declare
- -定义姓名、年龄变量
v_name rj192.name%type; - -与表中字段的类型和长度相同
v_age rj192.age%type;
v_x number(3,2);
v_y v_x%type; - -与v_x变量的类型和长度相同
Begin
- -从软件192表中id=3的姓名和年龄,赋值给v_name,v_age
Select name, age into v_name,v_age from rj192 where id =3; - -dml语句 sql语句
dbms_output.put_line(v_name||v_age); - - plsql语句
End;
- -%rowtype 表示一行记录的类型
Declare
v_stu_row rj192%rowtype; - -定义一行记录的类型
Begin
Select * into v_stu_row from rj192 where id=4;
dbms_output.put_line(v_stu_row.id||v_stu_row.name);
Exception
When NO_DATA_FOUND then
- -异常处理代码
dbms_output.put_line(‘没有该数据’);
When 异常类型2 then
dbms_output.put_line(‘’);
When others then
dbms_output.put_line(‘其他错误’);
End;
- -员工编号,查询一行记录
Declare
- -定义变量 保存员工编号
v_no number(4):=&input_no;
v_row emp%rowtype; - -一行记录的类型
Begin
- -输出
dbms_output.put_line(v_no);
select*into v_row from emp where empno=v_no;
dbms_output.put_line(v_row.empno||v_row.ename||v_row.job||v_row.mgr||v_row.hiredate||v_row.sal);
Exception
End;
流程控制
- -条件控制
If<条件表达式1>then
Pl/sql 和sql语句
Elsif<条件表达式2> then
Pl/sql 和sql语句
Else
其他语句
End if;
Case 条件表达式
When 条件表达式结果1 then
语句段1
When 条件表达式结果2 then
语句段2
。。。。。
When 条件表达式n then
语句段n
else
语句段
end case;
- -查询客服
- declare
v_num number(3):=&input_num;
begin
Case v_num
When v_num=1 then - - =比较是否相等
dbms_output.put_line(‘话费查询’);
When v_num=2 then
dbms_output.put_line(‘业务办理);
Else
dbms_output.put_line(‘人工服务’);
End case;
End;
- -循环控制
Loop
要执行的语句;
Exit when<条件语句>; - -条件满足,退出循环语句
end loop;
wheile <布尔表达式>loop
要执行的语句;
End loop;
For 循环计数器 in[reverse] 下限…上限 loop
要执行的语句;
End loop;