您的位置:首页 > 数据库 > SQL

pl sql 和if loop结构

2020-02-02 00:16 645 查看

--块结构
declare
v_num number :=10 ; --声明一个变量 := 赋值
v_name varchar2(10) :='偶发清';
v_second number :=#
begin
dbms_output.put_line('数字是'||v_num); --打印v_num变量 ||连接字符串
dbms_output.put_line(v_name);
dbms_output.put_line(v_second);
end;


--变量作用范围
--变量声明在哪里declare里面就对应在里面可以用
declare

v_num number :=10;
begin
declare
v_first number := 20;

begin
dbms_output.put_line(v_num);
dbms_output.put_line(v_first);
end;


dbms_output.put_line(v_num||'aaaa');
end;


declare
v_num number := 10;
begin
dbms_output.put_line(v_num);
declare
v_num number :=20;
begin
dbms_output.put_line(v_num);
end;

dbms_output.put_line(v_num);
end;

--变量数据类型
--标量数据类型varchar2 number date timestamp char
--属性类型 %type %rowtype

--%type
declare
v_sal emp.sal%type; --自动匹配表中某个字段的数据类型

begin
select sal into v_sal from emp where empno=7788;
dbms_output.put_line(v_sal);
end;


--%rowtype 自动匹配一行数据
declare
v_emp emp%rowtype;

begin
select * into v_emp from emp where empno=7788;
dbms_output.put_line(v_emp.sal||' '||v_emp.ename); --变量名 .字段 来访问
end;

 

--控制结构
--if 结构
declare

v_sal number :=8000;
begin
if v_sal>5000 then
dbms_output.put_line('工资还可以');
end if;
end;

--if else
declare
v_sal number:=2000;
begin
if v_sal>3500 then
dbms_output.put_line('工资大于3500');
else
dbms_output.put_line('工资还有待提升!');
end if;
end;

 

--嵌套if
declare
v_score number := 70;
v_sex varchar2(10):='男';
begin
if v_score<60 then
dbms_output.put_line('不及格');

if v_sex = '女'then
dbms_output.put_line('罚抄10遍');
else
dbms_output.put_line('跑操场');
end if;
else
dbms_output.put_line('及格');
if v_sex ='女' then
dbms_output.put_line('奖励iphone7');
else
dbms_output.put_line('喝酒去');
end if;
end if;
end;

--多重if
declare
v_score number := 90;
begin
if v_score>=90 then
dbms_output.put_line('优秀');
elsif v_score>=80 then
dbms_output.put_line('良好');
elsif v_score >=60 then
dbms_output.put_line('及格');
else
dbms_output.put_line('不及格');
end if;
end;

--case

declare
v_con constant varchar2(10) := '陈青山';--常量 值固定不变

v_grade varchar2(10) := '&请输入等级';
begin
case v_grade

when 'A' then
dbms_output.put_line('A等级');
when 'B' then
dbms_output.put_line('B等级');
else
dbms_output.put_line('没有这个等级');
end case;
end;

 

--打印1-100整数

--loop 基本循环
declare
v_i number :=1;
begin
loop
dbms_output.put_line(v_i);
v_i := v_i +1;
exit when v_i>100;
end loop;
end;

--while 循环
declare
v_i number :=1;
begin
while v_i<=100 loop
dbms_output.put_line(v_i);
v_i:=v_i+1;
end loop;
end;


--for 循环 偶数和
declare
v_i number;
v_sum number := 0;
begin
for v_i in reverse 1..100 loop
if mod(v_i,2) =0 then
dbms_output.put_line(v_i);
v_sum := v_sum+v_i;
end if;
end loop;
dbms_output.put_line(v_sum);
end;


--奇数和
declare
v_i number;
v_sum number := 0;
begin
for v_i in reverse 1..100 loop
if mod(v_i,2) !=0 then
dbms_output.put_line(v_i);
v_sum := v_sum+v_i;
end if;
end loop;
dbms_output.put_line(v_sum);
end;

--双重for循环
declare

begin
for i in 1..9 loop
for j in 1..i loop
dbms_output.put(j||'*'||i||'='||(i*j)||' ');
end loop;
dbms_output.put_line('');
end loop;
end;


--等腰三角形
declare

begin
for i in 1..5 loop
--打印空格
for j in 1..5-i loop
dbms_output.put(' ');
end loop;
--打印*
for k in 1..2*i-1 loop
dbms_output.put('*');
end loop;

dbms_output.put_line('');
end loop;


for i in 1..4 loop
--打印空格
for j in 1..i loop
dbms_output.put(' ');
end loop;
--打印*
for k in 1..2*(5-i)-1 loop
dbms_output.put('*');
end loop;

dbms_output.put_line('');
end loop;
end;


create table tb_for(
id number primary key,
v_num number
)

create sequence seq_for ;

--循环添加
declare

begin
for i in 1..100 loop
insert into tb_for values(seq_for.nextval,i);
end loop;
commit;
end;

 

--顺序控制
declare
v_emp emp%rowtype;

begin
select * into v_emp from emp where empno=&eno;
dbms_output.put_line(v_emp.ename||' '||v_emp.sal);
/* if v_emp.sal >2000 then
goto print;
dbms_output.put_line('aaaaa');
else
goto noprint;
end if;

<<print>>
dbms_output.put_line('要交税');
<<noprint>>
null;*/

exception
when no_data_found then
-- dbms_output.put_line('员工不准确 ,请输入正确员工编号');
dbms_output.put_line(sqlerrm);
end;

--自定义异常
declare
myerror exception ;--声明一个自定义异常
pragma exception_init(myerror,-20003);--关联错误编码
begin
raise exception

end;


select * from tb_for;

 

转载于:https://www.cnblogs.com/yin-dt/p/6736520.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
angchisi1289 发布了0 篇原创文章 · 获赞 1 · 访问量 145 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: