oracle plsql编程实战,Oracle-PLSQL编程基础

匿名块

就是一个没有名字的代码块,临时运行的sql语句代码块

基本格式:

declare

变量的声明部分;

begin

执行的逻辑部分;

end;

输出函数

dbms_output.put_line();

declare

n1 number; --声明了一个变量n1,n1是一个数字类型

begin

n1:=10; --将10的数字赋值给n1这个变量保存起来

dbms_output.put_line('数字是'||n1); --以行为单位进行换行输出

n1:=20; --重新赋值20给n1变量

dbms_output.put_line('数字是'||n1);

end;

输入函数

变量的输入: 变量:=&提示信息;

数字的输入

declare

n1 number;

n2 number;

n3 number;

begin

n1:=&数字1是;

n2:=&数字2是;

n3:=n1+n2;

dbms_output.put_line(n3);

end;

注意点:提示语不能一样,否则会当成同一个输入框。

字符串的输入

需要在输入的提示左右加上单引号

declare

ename varchar2(20);

begin

ename:='&你的名字';

dbms_output.put_line('Hello! '||ename);

end;

注意点:特殊符号,打印两个相当于转义,打印特殊符号本身。

declare

ename varchar2(20);

begin

ename:='&&haha';

dbms_output.put_line(ename);

end;

保存查询的结果

结果只有刚好一个内容,才能运行,多于1个或者没有数据都会报错

declare

v_ename varchar2(20);

v_job varchar2(20);

begin

select ename,job into v_ename,v_job from emp where sal=5000;

dbms_output.put_line(v_ename||','||v_job);

end;

引用型变量

变量名 表名.列名%type;

declare

v_ename emp.ename%type;

v_job emp.job%type;

begin

select ename,job into v_ename,v_job from emp where sal=5000;

dbms_output.put_line(v_ename||','||v_job);

end;

记录型变量

变量名 表名%rowtype;

declare

v_user emp%rowtype;

begin

select * into v_user from emp where ename='SMITH';

dbms_output.put_line(v_user.empno||','||v_user.sal||','||v_user.job);

end;

record复合类型

将一个表中需要反复用到的列,放在一起,定义成一个新的数据类型

type 复合类型名字 is record(

小变量名字 数据类型,

...

);

变量名 复合类型名字;

declare

type emp_users is record( --自己定义一种新的数据类型,这个数据类型包含了四个不同的字段

v_empno emp.empno%type,

v_ename emp.ename%type,

v_job emp.job%type,

v_deptno emp.deptno%type

);

v_user emp_users; --将自己定义的数据类型,声明给一个变量

begin

select empno,ename,job,deptno into v_user from emp where sal=5000;

dbms_output.put_line(v_user.v_empno);

dbms_output.put_line(v_user.v_ename);

dbms_output.put_line(v_user.v_job);

dbms_output.put_line(v_user.v_deptno);

end;

逻辑判断和分支

if

if 判断1 then

执行语句;

elsif 判断2 then

执行语句;

···

else

执行语句;

end if;

declare

n number;

begin

n:=&数字;

if n>0 then

dbms_output.put_line('正数');

elsif n<0 then

dbms_output.put_line('负数');

else

dbms_output.put_line('零');

end if;

end;

if开头 中间可以有很多的elsif else做最后一个判断 end if结束

if和elsif都需要加上判断 else表示剩余的所有逻辑

declare

money number;

begin

money:=&剩下的钱;

if money<=5 then

dbms_output.put_line('小笼包');

elsif money<=10 then

dbms_output.put_line('炒粉');

elsif money<=15 then

dbms_output.put_line('黄焖鸡');

elsif money<=20 then

dbms_output.put_line('隆江猪脚饭');

else

dbms_output.put_line('火锅');

end if;

end;

case when

declare

begin

case

when xxx then 执行语句;

when xxx then 执行语句;

...

else 执行语句;

end case;

end;

declare

v_sno varchar2(10);

v_score number;

begin

v_sno:='&学号';

select avg(score) into v_score from degree where sno=v_sno;

case

when v_score<60 then dbms_output.put_line('不及格');

else dbms_output.put_line('及格');

end case;

end;

--用case when判断emp表中某个用户编号是否存在

declare

v_empno emp.empno%type;

c number;

begin

v_empno:=&员工编号;

select count(1) into c from emp where empno=v_empno;

case

when c=0 then dbms_output.put_line('该用户不存在');

else

dbms_output.put_line('用户存在');

end case;

end;

循环

for语法

for 新的变量名字 in 范围 loop

执行语句;

end loop;

--9x9乘法表

declare

begin

for i in 1..9 loop

for j in 1..i loop

dbms_output.put(j||'x'||i||'='||i*j||' ');

end loop;

dbms_output.put_line('');

end loop;

end;

while

while循环的语法:当判断为真的时候进入循环,判断为假跳出循环

while 判断是否在循环范围内 loop

执行语句;

end loop;

declare

n number;

begin

n:=10;

while n>=1 loop

dbms_output.put_line(n);

n:=n-3;

end loop;

end;

loop

loop循环的语法:当判断为假的时候跳出循环

loop

exit when 判断什么时候退出循环;

执行语句;

end loop;

declare

n number;

begin

n:=10;

loop

exit when n<1;

dbms_output.put_line(n);

n:=n-3;

end loop;

end;

循环中的三个关键字

exit

跳出循环,不要循环了,一个关键字只能控制离它最近的一个循环

return:跳出整个正在运行的程序

continue

跳过本次循环,直接开始下一次的循环

goto

使用goto语句跳到定义标签的位置

goto 标签名

<>

将select查询的结果当成for循环的范围

declare

begin

for i in (select * from emp where job='MANAGER' and comm is null) loop

update emp set comm=i.sal*0.1 where empno=i.empno;

commit;

dbms_output.put_line(i.ename||','||i.sal*0.1);

end loop;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值