一、Oracle控制语句
1、编写语句
--写了才会输出
set serverout on;
--开始语句
begin
--这里面开始写语句块
dbms_output.put_line('Hello'); --注意" ; "不要完了
--控制语句结束  
end;
--在对话框执行时,需要输入/
2、执行语句

3、定义变量
-只定义变量
declare 变量名  数据类型;
--定义变量并赋值
declare 变量名  数据类型:赋值;示例:
--写了才会输出
set serverout on;
--定义变量price并赋值,注意不是在语句块里面定义
declare price number:=100;
--开始语句
begin
--这里面开始写语句块
dbms_output.put_line('Hello'||price); --注意" ; "不要完了
--控制语句结束  
end;
--在对话框执行时,需要输入/
注意:可以一次定义多个变量,不用每次都写declare。
示例:
set serverout on;
--定义多个变量
declare price number:=100;
        productName varchar(20):='notebook';
begin
  -- 凭借符号|| 
  dbms_output.put_line(price || productName);
end;
4、赋值
定义变量并赋值
--定义变量price并赋值100,注意不是在语句块里面定义
declare price number:=100;5、查询结果赋值
into:将查询结果赋值给定义的变量
select 查询字段1,查询字段2 into 赋值给定义的变量1,赋值给定义的变量1 from t_book where id=bs_id;示例:
set serverout on;
declare count_books number;
begin 
  select count(*) into count_books from t_book;
  dbms_output.put_line(count_books);
end;
定义多个变量查询结果赋值:直接有都好隔开。
select id,price into new_id,max_price from t_book where id=bs_id;6、拼接
拼接符号||
set serverout on;
begin
  -- 凭借符号|| 
  dbms_output.put_line('Hello' || 'word');
end;
二、控制语句
注意:都是写在语句块里面。
1、普通-if条件语句
  if 条件 then 
    条件成立逻辑
    else
      不成立逻辑
      end if;注意:end if;
示例:
set serverout on;
declare count_books number;
begin 
  select count(*) into count_books from t_book;
  dbms_output.put_line(count_books);
  if count_books > 2 then 
    dbms_output.put_line('总记录数大于2');
    else
      dbms_output.put_line('总记录数不大于2');
      end if;
end;输出结果:

2、复杂-else-if
示例:
set serverout on;
declare count_books number;
begin 
  select count(*) into count_books from t_book;
  dbms_output.put_line(count_books);
  if count_books = 1 then dbms_output.put_line('总记录数等于1');
    else if count_books >2 then dbms_output.put_line('总记录数大于2');
    else dbms_output.put_line('总记录数为0');
      end if;
      end if;
end;注意: 有多少个if,就必须要有多少个end if。

三、流程控制
1、case when then
  case 判断值
    when 判断值等与值1 then 1满足时成立时逻辑;
    when 判断值等与值2 then 1满足时成立时逻辑;
    when 判断值等与值3 then 1满足时成立时逻辑;
    else 都不满足时逻辑;
  end case;注意:不要忘记end case;
示例:
set serverout on;
declare count_books number;
begin
  select count(*) into count_books from t_book;
  dbms_output.put_line('总记录数=' || count_books);
  
  case count_books
    when 1 then dbms_output.put_line('有1条记录');
    when 2 then dbms_output.put_line('有2条记录');
    when 2 then dbms_output.put_line('有3条记录');
    else dbms_output.put_line('都不满足条件');
  end case;
end;
四、循环
1、无条件循环-loop
  loop 
    跳出循环控制,不然一直循环;
    要操作的逻辑;
  end loop;示例:查询表中从id为2的书的价格,当大于id大于4时,跳出无线循环。
原始表数据:

set serverout on;
declare bs_id number:=2;
        max_price number;
        new_id number;
begin
  loop 
   --跳出无线循环的条件,exit后面必须要有分号。if必须要用endif
    if(bs_id >4) then 
    exit;
    end if;
    
    select id,price into new_id,max_price from t_book where id=bs_id;
    
    dbms_output.put_line('书名ID为:'|| new_id || '的书价格为:' || max_price);
    
    bs_id:=bs_id+1;
  end loop;
end;注意:
1、必须要有跳出无线循环的条件(开关)
2、exit跳出语句后面必须要有分号。
3、if必须要用end if。
4、loop 必须要用end loop
5、注意条件要增加如上的 bs_id:=bs_id+1;
输出结果:

2、while循环
格式:
while 条件  满足条件执行逻辑。示例:输出ID冲2开始,小于4的书籍信息。
原始表数据:

编写sql:
set serverout on;
declare bs_id number:=2;
        b_price number;
        book_Name varchar(20);
begin
  
  while (bs_id) < 4 loop
    select bookName,price into book_Name,b_price from t_book where id=bs_id;
    dbms_output.put_line('ID=' || bs_id || '书名:' || book_Name || '价格:' || b_price);
    bs_id:=bs_id+1;
    end loop;
    
end;注意:循环条件,不然会导致死循环

注意:while与loop的区别是,loop需要我们手动写exit;跳出循环语句,而while通过while条件来控制循环。
3、for循环
格式:
for 循环参数 in 循环值 loop
    其它操作逻辑;
  end loop;代码示例:输出id从2到4的书籍信息。
set serverout on;
declare b_price number;
        book_Name varchar(20);
begin
  for bs_id in 2..4 loop
    select bookName,price into book_Name,b_price from t_book where id=bs_id;
    dbms_output.put_line('ID=' || bs_id || '书名:' || book_Name || '价格:' || b_price);
  end loop;
end;注意:for后面的参数值从多少到多少是2个.
输出结果:

 
        
       
     
      
评论 (0)