美文网首页
datagrips oracle编写存储过程

datagrips oracle编写存储过程

作者: LX_代码制造坊 | 来源:发表于2021-11-27 17:45 被阅读0次

变量

普通变量

定义方式:
变量名 类型(长度);

普通变量类型的赋值方式有两种:
1、通过 := 直接赋值;
2、通过 select (表中变量名) into (定义的普通变量) from ... where ... 赋值;
使用方法如下:

declare
    shop_name varchar2(20) := 'iphone 12'; --定义时直接赋值
    shop_desc varchar2(255);
    shop_type number;
begin
    shop_desc := '苹果12手机'; --直接赋值
    select 12 into shop_type from DUAL; --通过查询赋值
    DBMS_OUTPUT.PUT_LINE('商品名称:'||shop_name||',商品类型:'||shop_type||',商品描述:'||shop_desc); --DBMS_OUTPUT输出打印
end;
引用变量

定义方式
变量名 表名.列名%type;
使用方法如下:

declare
    shop_id XJ_TEST_SHOP.ID%type;
    shop_type XJ_TEST_SHOP.SHOP_TYPE%type;
    shop_name XJ_TEST_SHOP.SHOP_NAME%type;
begin
    select ID ,SHOP_TYPE,SHOP_NAME into shop_id , shop_type ,shop_name from XJ_TEST_SHOP where ID='3';
    DBMS_OUTPUT.PUT_LINE('姓名:'||shop_name||';类型:'||shop_type||';id:'||shop_id);
end;
记录型变量(对象变量)

定义方式
对象名 表名%rowtype
使用方法如下:

declare
    shop XJ_TEST_SHOP%rowtype;
begin
    select * into shop from XJ_TEST_SHOP where ID='3';
    DBMS_OUTPUT.PUT_LINE('商品名称:'||shop.shop_name||',商品类型:'||shop.shop_type||',商品描述:'||shop.shop_desc);
end;

流程控制

条件分支
declare
    account number;  --定义数量
begin
    select COUNT(*) into account from XJ_TEST_SHOP;
--开始判断
    if  account <= 10 then
        DBMS_OUTPUT.PUT_LINE('查询数量为在0-10之间');
    elsif account > 10 then
        DBMS_OUTPUT.PUT_LINE('查询数量为在10以上');
    end if;
end;
循环
declare
    num number :=1;
begin
    loop
        exit when num>5;
        DBMS_OUTPUT.PUT_LINE(num);
        num := num+1;
    end loop;
end;

游标

无参游标

定义
用于临时存储一个查询返回的多行数据,通过遍历的方式可以逐行访问处理该结果集的数据;
游标属性

  • %rowcount 整型 获取fetch语句返回的数据行数
  • %found 布尔型 最近的fetch语句返回一行数据则为真,否则为假
  • %notfound 布尔型 与%found相反
  • %isopen 布尔型 游标已经打开时值为真
    语法
declare
    cursor shop is select SHOP_NAME, SHOP_TYPE
                   from XJ_TEST_SHOP;
    s_name XJ_TEST_SHOP.SHOP_NAME%type;
    s_type XJ_TEST_SHOP.SHOP_TYPE%type;
begin
    open shop;
    loop
        fetch shop into s_name,s_type;
        exit when shop%notfound;
        DBMS_OUTPUT.PUT_LINE(s_name||'------'||s_type);
    end loop;
    close shop;
end;
有参游标
declare
    cursor shop(sname XJ_TEST_SHOP.SHOP_NAME%type) is select SHOP_NAME, SHOP_TYPE
                   from XJ_TEST_SHOP where SHOP_NAME=sname;
    s_name XJ_TEST_SHOP.SHOP_NAME%type;
    s_type XJ_TEST_SHOP.SHOP_TYPE%type;
begin
    open shop('新疆测试商品二号');
    loop
        fetch shop into s_name,s_type;
        exit when shop%notfound;
        DBMS_OUTPUT.PUT_LINE(s_name||'------'||s_type);
    end loop;
    close shop;
end;

创建含有输入输出的存储过程

create or update procedure h(sid in XJ_TEST_SHOP.ID%type,sname out XJ_TEST_SHOP.SHOP_NAME%type) is
begin
    select SHOP_NAME into sname from XJ_TEST_SHOP where ID = sid;
end;

相关文章

网友评论

      本文标题:datagrips oracle编写存储过程

      本文链接:https://www.haomeiwen.com/subject/yshqxrtx.html