PL/SQL学习笔记

-- 1.变量的定义   
变量名   类型(长度)

--2.变量赋值
变量名 := 变量名

--案例1.1
DECLARE
	apple_num number ;--苹果个数
	apple_price number(10,2);--苹果价格
	apple_money number(10,2);--苹果金额
BEGIN
	--赋值
	apple_num:=100;
	apple_price:=4.25;
	apple_money:=apple_num*apple_price;
	-- 包名。方法名   ||固定语法
	DBMS_OUTPUT.put_line('总金额'||apple_money);
END;

--3.案例1.2
DECLARE
	apple_num number ;--苹果个数
	apple_price number(10,2);--苹果价格
	apple_money number(10,2);--苹果金额
BEGIN
	--赋值
	apple_num:=100;
	SELECT FRUIT_PRICE INTO apple_price FROM FRUITS_PRICE WHERE ID = '1';
	apple_money:=apple_num*apple_price;
	-- 包名。方法名   ||固定语法
	DBMS_OUTPUT.put_line('总金额'||apple_money);
END;

--4.属性类型 用于获取表列的类型
--通过   表名.列名%type    获取该列的类名
--案例1.3  苹果价格通过属性类型定义变量类型
DECLARE
	apple_num number ;--苹果个数
	apple_price FRUITS_PRICE.FRUIT_PRICE%TYPE;--苹果价格
	apple_money number(10,2);--苹果金额
BEGIN
	--赋值
	apple_num:=100;
	SELECT FRUIT_PRICE INTO apple_price FROM FRUITS_PRICE WHERE ID = '1';
	apple_money:=apple_num*apple_price;
	-- 包名。方法名   ||固定语法
	DBMS_OUTPUT.put_line('总金额'||apple_money);
END;

--5.记录变量
-- 用于获取一行记录的数据放到一个变量里面
-- 表名%rowtype
DECLARE
	apple_info  FRUITS_PRICE%rowtype;--一行信息
BEGIN

	SELECT * INTO apple_info FROM FRUITS_PRICE WHERE ID = '1';
	-- 包名。方法名   ||固定语法
	DBMS_OUTPUT.put_line('价格信息'||apple_info.FRUIT_PRICE);
END;

--6.异常
DECLARE
	apple_info  FRUITS_PRICE%rowtype;--一行信息
BEGIN
	-- 查询不存在的数据,这样变量就没有办法赋值了
	SELECT * INTO apple_info FROM FRUITS_PRICE WHERE ID = '100';
	-- 包名。方法名   ||固定语法
	DBMS_OUTPUT.put_line('价格信息'||apple_info.FRUIT_PRICE);
	
EXCEPTION
		WHEN NO_DATA_FOUND THEN
			DBMS_OUTPUT.put_line('没有查到台账数据');
END;

--7.条件判断
if 条件 then
代码
elseif 条件 then
代码
elseif 条件 then
代码
else
代码
end if;

--阶梯水价
DECLARE
	p1 NUMBER;
	p2 NUMBER;
	p3 NUMBER;
	
	money NUMBER;
	amount NUMBER;
BEGIN
	amount:=10.4;
	
	p1:=1.2;
	p2:=2.2;
	p3:=3.2;
-- 逻辑有问题可以改改
	if amount<3 then
	money := amount * p1;
	elsif amount <5 and 3<=amount
	then 
	money := amount * p2;
	elsif amount >= 5
	then
	money := amount * p3; 
	else
	money := amount * 10;
	end if;
DBMS_OUTPUT.put_line('总金额'||money);
end;

--8.循环
---8.1无条件循环
---8.2条件循环
---8.3for循环

--8.1
DECLARE
	vnum NUMBER
BEGIN
	vnum:=1;
	LOOP
		DBMS_OUTPUT.put_line('当前值'||v-num);
	v-num:=vnum+1;
	IF vnum>10 THEN
		EXIT; 
	END IF; 
END LOOP;
END;

--8.循环
DECLARE
   vm NUMBER;
BEGIN
   vm:=0; 
LOOP
	DBMS_OUTPUT.put_line('价格信息'||vm);
  vm:=vm+1;
	IF vm=100 THEN
		EXIT; 
	END IF; 
END LOOP;
END;

--for
DECLARE
BEGIN
	for vv in 1 .. 100
	LOOP
     DBMS_OUTPUT.put_line('价格信息'||vv);
	END LOOP;
END;

--9.存储函数 用户自定义的函数
-- 可以接受多个参数 返回一个值

-- 案例,水果价格查询
CREATE OR REPLACE FUNCTION FIND_F_PRICE  --定义函数名称
(fname VARCHAR2) -- 传入参数
return NUMBER
IS
	--声明变量
	fprice NUMBER;
BEGIN
	SELECT FRUIT_PRICE INTO fprice 
	FROM 
		FRUITS_PRICE 
	WHERE
		FRUIT_NAME= fname;
	return fprice;
END;

SELECT FIND_F_PRICE('苹果') FROM DUAL;

-- 存储过程
CREATE OR REPLACE PROCEDURE addFruitInfo
(
ID IN NUMBER, --默认是IN传入参数
FNAME VARCHAR2,
FPRICE NUMBER
)
IS
BEGIN
	INSERT INTO FRUITS_PRICE 
				VALUES (ID,FNAME,FPRICE);
END;

--调用存储过程
CALL addFruitInfo(3,'榴莲',100);

SELECT * FROM FRUITS_PRICE;

-- 9传出参数的存储过程
CREATE OR REPLACE PROCEDURE getAmount
(
fname VARCHAR2,
fnum NUMBER,
fmoney OUT NUMBER
)
IS
	tempPrice NUMBER;
BEGIN
	SELECT FRUIT_PRICE INTO tempPrice FROM FRUITS_PRICE WHERE FRUIT_NAME = fname;
	fmoney := fnum* tempPrice;
END;


DECLARE
	amount NUMBER;
BEGIN
	getAmount('苹果',100,amount);
	DBMS_OUTPUT.put_line(amount);
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值