-- 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;
PL/SQL学习笔记
最新推荐文章于 2024-10-08 17:35:38 发布