--块结构
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;sql
--变量做用范围
--变量声明在哪里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;iphone
dbms_output.put_line(v_num||'aaaa');
end;oop
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 %rowtypeip
--%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;it
--%rowtype 自动匹配一行数据
declare
v_emp emp%rowtype;io
begin
select * into v_emp from emp where empno=7788;
dbms_output.put_line(v_emp.sal||' '||v_emp.ename); --变量名 .字段 来访问
end;for循环
--控制结构
--if 结构
declaretable
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;