oracle存储过程

--判断语句

declare
v_count number;
begin
  select count(1) into v_count from student;
  if v_count>20 then
    dbms_output.put_line('数据条数大于20条,为:'|| V_count ||'条');
  elsif v_count>=10 then
    dbms_output.put_line('数据条数在10~20之间,为:'|| v_count ||'条');
  else
    dbms_output.put_line('数据条数在10条以下,为:'|| v_count ||'条');
  end if;
end;

--循环语句(当i>10退出循环)

declare
i number := 1;
begin
  loop
    exit when i>10; 
    dbms_output.put_line(i);
    i := i + 1;
  end loop;
end;

--游标属性
游标的属性      返回值类型      说明
%rowcount           整形            获得fetch语句返回的数据行数
%found               布尔型          最近的fetch语句返回,行数据则为真,否则为假
%notfound          布尔型          与%found属性返回值相反
%isopen             布尔型           游标已经打开时值为真,否则为假

其中%notfound是在游标中找不到元素的时候返回true,通常用来判断出循环

--创建游标,声明游标 -> 打开游标 -> 读取游标 -> 关闭游标

declare
--声明游标
  cursor e_student(v_id student.sno%type) is select sno,sanme from student where sno = v_id;
  --声明变量
  v_name student.sanme%type;
  v_sno student.sno%type;
begin
  --打开游标
  open e_student(1003);
  --便利循环
  loop
    fetch e_student into v_sno,v_name;
    --退出循环(%notfound行数据为空,返回ture退出循环)
    exit when e_student%notfound;
    dbms_output.put_line('姓名:' || v_name ||' - '|| '学号:' || v_sno);   
  
  end loop;
  
  --关闭游标
  close e_student;
end;

--存储过程(无参数)

create or replace procedure p_hello as
--声明变量
begin
  dbms_output.put_line('hello world!');
end p_heelo;

--调用存储过程

begin 
  p_hello;
end;

--带参数的存储过程

create or replace procedure p_student(i_sno in student.sno%type) as 
--声明变量
v_sno student.sno%type;
v_name student.sanme%type;
begin 
  --查询某个学生的姓名和学号
  select sno,sanme into v_sno,v_name from student where sno=i_sno;
  dbms_output.put_line('学号:'|| v_sno||'姓名:'||v_name);
end;

--调用存储过程

begin
  p_student('1004');
end;

--存储过程(输入和输出)

create or replace procedure p_sutdent_int_put(i_id in student.sno%type,o_name out student.sanme%type) as
--变量声明

begin
  select sanme into o_name from student where sno=i_id;
end;

--获取存储过程的输出数据并显示

declare
  v_name student.sanme%type; 
begin
  p_sutdent_int_put('1005',v_name);
  dbms_output.put_line(v_name);
end;

进阶

--冒泡排序(6758493021)

  1. length()      获取字符长度
  2. substr(变量,第几位,截取长度)     截取字符串
    1. substr(string,start,length)

      参数

      必须

      参数说明

      string

      必须

      指定的要截取的字符串

      start

      必须

      规定在字符串的何处开始:

      正数 - 在字符串的指定位置开始

      负数 - 在从字符串结尾的指定位置开始

      0 - 在字符串中的第一个字符处开始

      length

      可选

      指定要截取的字符串长度,缺省时返回字符表达式的值结束前的全部字符

    2. 例如:

      select substr('abcdefg',3,4) from dual;--结果是cdef
      
      select substr('abcdefg',-3,4) from dual;--结果efg
      
      select substr('abcde',2),substr('abcde',-2),substr('abcde',2,3),substr('abcdewww',-7,3) from dual; 
      --结果是bcde、de、bcd、bcd
  3. relpace(变量,要替换的字符,替换后字符)    替换字符

--for循环

for 变量 开始..结束 loop
end loop;

--if判断

if 表达式 then 执行代码
elsif 表达式 then 执行代码
elsif 表达式 then 执行代码
else 执行代码
end if;

 冒泡排序 -- 程序(6758493021)升序排序、降序排序

declare 
  v_num varchar2(20):=6758493021;
  v_leng number;
  v_asc varchar2(20);
  v_desc varchar2(20);
  a number;
  
begin
  v_leng:=length(v_num);
  for i in 1..V_leng loop
    a:=substr(v_num,1,1);
    for j in 1..v_leng-i loop
      if a > substr(v_num,j+1,1) then
        a:=substr(v_num,j+1,1);
      else
        a:=a;
      end if;
      
    end loop;
    dbms_output.put_line(a);
    v_num:=replace(v_num,a,'');
    v_asc:= v_asc||a;
    v_desc:=a||v_desc;
  end loop;
  dbms_output.put_line('升序排序后数据:'|| v_asc);
  dbms_output.put_line('降序排序后数据:'|| v_desc);
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值