变量
普通变量
定义方式:
变量名 类型(长度);
普通变量类型的赋值方式有两种:
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;
网友评论