Oracle的子查询和程序包上机1
--1、
--利用问题1中创建的表salayr_details表,创建work_days()函数,
--接受EMPCODE雇员编号,并检查所有雇员的工作天数。
--标准工作天数22天,雇员每少工作一天从其工资中扣除50元。
--函数返回雇员最后的工资,工作天数多于标准天数不加工资,
--工资扣完为止,不可以为负值。
CREATE OR REPLACE FUNCTION work_days(ecode NUMBER)
RETURN NUMBER
AS
days NUMBER;
sal NUMBER;
BEGIN
SELECT workdays,salary INTO days,sal FROM salary_detail
WHERE empcode=ecode;
days := 22-days; --少工作的天数
IF days>=1 THEN
sal := sal-50*days; --实际薪水
IF sal<0 THEN
sal := 0;
END IF;
END IF;
RETURN sal;
END;
SELECT * FROM salary_detail;
SELECT work_days(1004) FROM dual;
--2、
--创建包含一个过程和一个函数的toyspack包,
--将过程和函数分别命名为updateToyPrice和avgToyPrice。
--过程应当将每个玩具的单价增加10%,直到玩具的
--平均价格达到400。此外,过程还应保证任一玩具的价格
--不超过500。
1.直接使用条件
2.使用更新游标
--使用更新游标
CREATE OR REPLACE PACKAGE pkg_toys
AS
CURSOR c_toy RETURN my_toys%ROWTYPE;
PROCEDURE updateToyPrice;
FUNCTION avgToyPrice RETURN NUMBER;
END pkg_toys;
CREATE OR REPLACE PACKAGE BODY pkg_toys
AS
--更新游标
CURSOR c_toy RETURN my_toys%ROWTYPE
IS SELECT * FROM my_toys FOR UPDATE;
--求平均价格函数
FUNCTION avgToyPrice RETURN NUMBER
AS
v_avg NUMBER;
BEGIN
SELECT AVG(price) INTO v_avg FROM my_toys;
RETURN v_avg;
END avgToyPrice;
--价格增加10%过程
PROCEDURE updateToyPrice
AS
v_avg NUMBER;
BEGIN
v_avg := avgToyPrice;
WHILE v_avg<400 LOOP
FOR v_toy IN c_toy LOOP
IF v_toy.price*1.1<=500 THEN
UPDATE my_toys SET price=price*1.1 WHERE CURRENT OF c_toy;
END IF;
END LOOP;
v_avg := avgToyPrice;
END LOOP;
END updateToyPrice;
END pkg_toys;
SELECT * FROM my_toys;
select AVG(price) FROM my_toys;
CALL pkg_toys.updateToyPrice();
--直接使用条件
CREATE OR REPLACE PACKAGE pkg_toys
AS
PROCEDURE updateToyPrice;
FUNCTION avgToyPrice RETURN NUMBER;
END pkg_toys;
CREATE OR REPLACE PACKAGE BODY pkg_toys
AS
--求平均价格函数
FUNCTION avgToyPrice RETURN NUMBER
AS
v_avg NUMBER;
BEGIN
SELECT AVG(price) INTO v_avg FROM my_toys;
RETURN v_avg;
END avgToyPrice;
--价格增加10%过程
PROCEDURE updateToyPrice
AS
v_avg NUMBER;
BEGIN
v_avg := avgToyPrice;
WHILE v_avg<400 LOOP
UPDATE my_toys SET price=price*1.1 WHERE price*1.1<=500;
v_avg := avgToyPrice;
END LOOP;
END updateToyPrice;
END pkg_toys;
--3、
Create table billInfo
(
billID varchar2(14), --账单编号,格式为‘ZD201711130002’
billDate date --开单时间
);
--要求编写过程实现开单功能,即生成账单编号并插入记录。
--编号格式:ZD+年月日+自增四位数
SELECT * FROM billinfo;
SELECT to_char(SYSDATE,'yyyymmdd') from dual;
INSERT INTO billinfo VALUES('ZD201711130001',SYSDATE);
CREATE OR REPLACE PROCEDURE proc_bill(bid OUT VARCHAR2)
AS
i NUMBER;
v_max VARCHAR2(14);
BEGIN
bid := 'ZD'||to_char(SYSDATE,'yyyymmdd');
SELECT COUNT(1) INTO i FROM billinfo
WHERE billid LIKE bid||'%';
IF i>0 THEN
SELECT MAX(billid) INTO v_max FROM billinfo;
bid:=bid||SUBSTR((SUBSTR(v_max,11)+10001),2);
ELSE
bid:=bid||'0001';
END IF;
END;
DECLARE
bid VARCHAR2(14);
BEGIN
proc_bill(bid);
dbms_output.put_line(bid);
END;
Oracle的子查询和程序包上机1相关推荐
- oracle标量子查询 外层,Oracle标量子查询
Oracle标量子查询 ORACLE允许在select子句中包含单行子查询, 使用标量子查询可以有效的改善性能,当使用到外部连接,或者使用到了聚合函数,就可以考虑标量子查询的可能性. 下面来看几个例子 ...
- Oracle 原理: 初步认识程序包
oracle 中的程序包和C中的类库,JAVA中的package包类似.是过程.函数.变量.游标.异常的集合.程序包由规范和主体两部分组成.规范主要用于声明.声明公有对象(类型.常量.变量.异常.游标 ...
- oracle单行子查询返回多个行 order by,单行子查询返回多个行
子查询: 用子查询能解决的问题 假想你想要写一个查询来找出挣钱比陆涛的薪水还多的人.为了解决这个问题,你需要两个查询:一 个找出陆涛的收入,第二个查询找出收入高于陆涛的人. 你可以用组合两个查询的方法 ...
- oracle v sql不存在,程序包oracle.sql不存在
今天项目在maven install 的时候报"程序包oracle.sql不存在,类TIMESTAMP找不到"的问题: plugins:maven-compiler-plugin: ...
- oracle做子查询注意事项,Oracle子查询详解
Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...
- Oracle的子查询【单行子查询和多行子查询】
1.查询部分分为主查询和子查询: 2.根据返回值的记录多少分为单行子查询和多行子查询:单行子查询用单行比较符=连接:多行子查询用多行比较符in连接: 3.子查询的内容可以放在FROM后面,也可以放在W ...
- Oracle:子查询——rownum
1.rownum是oracle专用的关键字. 2.rownum与表在一起,表亡它亡,表在它在. 3.rownum默认情况下,从表中是查不出来的. 4.只有在select语句中,明确写出rownum才能 ...
- oracle 语句 子查询,Oracle子查询
在本教程中,您将了解有助于构建更多可读查询的Oracle子查询,并可在不使用复杂联接或联合的情况下编写查询. Oracle子查询简介 子查询是嵌套在另一个语句(如SELECT,INSERT,UPDAT ...
- Oracle 7~ 子查询、同义词
Oracle子查询就是嵌套查询,把select查询的结果作为另一个select.update或delete语句的条件 它的本质就是where条件查询中的一个表达式. 1. 单行子查询:向外部返回的结果 ...
最新文章
- JavaScript 之 call和apply,bind 的模拟实现
- 如何看待消息中间件的选型
- Typecho给文章设置永久链接
- 首发:吴恩达的 CS229的数学基础(线性代数),有人把它做成了在线翻译版本!...
- 用计算机弹没那种命,成熟小女人QQ个性网名 没那种命就别犯那种病
- respberry pi3 上手随记
- Ubuntu18.04更换为国内源
- 基于ABP落地领域驱动设计-05.实体创建和更新最佳实践
- P3242 [HNOI2015] 接水果(整体二分、扫描线、dfs序)
- C#LeetCode刷题之#830-较大分组的位置(Positions of Large Groups)
- MinGW 64的安装 - 官网sourceforge安装失败非翻墙解决办法
- 利用Linux命令行进行文本按行去重并按重复次数排序
- CCS实例,网页栏目
- hadoop jps 没有命令_hadoop:伪分布模式启动步骤分解
- 信号完整性之传输线理论(三)
- cannot re-initialize CUDA in forked subprocess.To use CUDA with multiprocessing,you must use the ‘sp
- 零零信安王宇:通过基于VPT的风险管理 用20%的时间去解决80%的风险
- 2019腾讯广告算法大赛之清洗曝光广告数据集以及构造标签
- 将SSH多次登录失败的IP加入黑名单
- Kafka入门篇学习笔记整理
热门文章
- 【深度学习】步态识别-论文笔记:(ICCV-2021)用于步态识别的3D局部卷积神经网络
- 智能交通行业中安防业务突出的上市公司
- Foundation Actionscript 3.0 with Flash CS3 and Flex
- 如何设计一个漂亮的仪表盘—Jeecg仪表盘轻松实现【数据可视化专题】
- 企业邮箱-oa移动办公系统,高效协同办公解决方案
- 钉钉机器人自动回复消息_微信pc客户端自动发消息(微信聊天机器人)
- 基于SSM的新闻管理系统的设计与实现 毕业论文+项目源码及数据库文件、
- 迭代一感想总结 - 赵雷彧
- 什么是兴趣点 (POI)
- 天购免费购物新概念 电商新宠领前行