Oracle控制语句

admin
2022-12-05 / 0 评论 / 134 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年12月05日,已超过719天没有更新,若内容或图片失效,请留言反馈。

一、Oracle控制语句

1、编写语句

--写了才会输出
set serverout on;

--开始语句
begin

--这里面开始写语句块
dbms_output.put_line('Hello'); --注意" ; "不要完了


--控制语句结束  
end;
--在对话框执行时,需要输入/

image-20221205203804619

2、执行语句

image-20221205204046263

3、定义变量

-只定义变量
declare 变量名  数据类型;
--定义变量并赋值
declare 变量名  数据类型:赋值;

示例:

--写了才会输出
set serverout on;

--定义变量price并赋值,注意不是在语句块里面定义
declare price number:=100;

--开始语句
begin

--这里面开始写语句块
dbms_output.put_line('Hello'||price); --注意" ; "不要完了


--控制语句结束  
end;
--在对话框执行时,需要输入/

image-20221205204518761

注意:可以一次定义多个变量,不用每次都写declare。

示例:

set serverout on;
--定义多个变量
declare price number:=100;
        productName varchar(20):='notebook';
begin
  -- 凭借符号|| 
  dbms_output.put_line(price || productName);
end;

image-20221205205445823

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;

image-20221205211125531

定义多个变量查询结果赋值:直接有都好隔开。

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;

image-20221205204906756

二、控制语句

注意:都是写在语句块里面。

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;

输出结果:

image-20221205222857003

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。

image-20221205223824089

三、流程控制

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;

image-20221205224750943

四、循环

1、无条件循环-loop

  loop 
    跳出循环控制,不然一直循环;
    要操作的逻辑;
  end loop;

示例:查询表中从id为2的书的价格,当大于id大于4时,跳出无线循环。

原始表数据:

image-20221205231947384

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;

输出结果:

image-20221205232054264

2、while循环

格式:

while 条件  满足条件执行逻辑。

示例:输出ID冲2开始,小于4的书籍信息。

原始表数据:

image-20221205233550936

编写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;

注意:循环条件,不然会导致死循环

image-20221205233517454

注意: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个.

输出结果:

image-20221205234805156

2

评论 (0)

取消