Oracle视图、索引与存储过程

news2024/11/28 3:34:15

目录

一、视图

二、索引

三、存储函数

(一)存储函数的语法结构

(二)案例

1.输入ID,返回NAME

2.传入数字,能够被2整除就是偶数,不能被2整除的就是奇数

3.对两个数字求和,对和判断奇偶数

4.判断SCOTT用户下,工资大于3000的员工

5.输入部门名称,返回部门员工数量


一、视图

Oracle视图与Mysql相同,相当于存储一段select语句,详细可参考我的另一篇博文:

mysql8高级——视图-雷神乐乐的博客-CSDN博客

创建视图的语法:

CREATE [OR REPLACE] VIEW '视图名'

AS 查询语句 [WITH [CASCADED|LOCAL] CHECK OPTION]

-- 只读

[WITH READ ONLY]

创建普通视图:

原表中有ID,NAME和PWD三个字段,创建一个视图,只显示ID和NAME两列数据

CREATE OR replace VIEW t_view as
SELECT ID, NAME
FROM teacher;

上面这段代码与直接从原表中查询这两个字段的结果一样

SELECT ID, NAME FROM teacher;

那为什么还要多此一举呢?在工作中有些敏感字段不能让某些人看到,普通的查询语句能够看到表中所有的字段,但是使用视图就可以避免数据不安全。

注意:

1.经常用到的语句可以创建一个视图

2.视图仅用于查看数据,不要在视图中对数据进行查看以外的操作,如果删除视图中的某条数据,那么原表中的数据也会进行相应的删除。

二、索引

        索引是一种供服务器在表中快速查找一个行的数据库结构。当我们使用多表联查时,往往是从表中的第一个数据扫描到表中最后一个数据,浪费资源。索引就相当于将你要找的数据和数据存放的位置,单独放在一个表中,在查询的时候能够大大减少资源的浪费。

Create[UNIQUE|BITMAP]index

[schema.]index_nameon[schema.]table_name(column_name[ASC|DESC],…n,[column_expression])|CLUSTER[schema.]cluster_name

[INITRANSinteger]

[MAXTRANSinteger]

[PCTFREEinteger]

[PCTUESDinteger]

[TABLESPACEtablespace_name]

[STORAGEstorage_clause]

[NOSORT]

[REVERSE]

创建普通索引:

-- 给teacher表中的name字段添加索引
CREATE INDEX t_index on teacher (name);

创建唯一索引:

-- 不允许有同名同姓的数据插入,否则报错
CREATE UNIQUE INDEX only_name on DEMO (name);

创建反向索引:

CREATE UNIQUE INDEX only_name on DEMO (name) reverse;

其他的还有主键索引、非空索引等。

三、存储函数

        存储函数相当于自定义函数,类似java中对方法中,将实参传入形参中,并在方法中对形参进行一定的处理。即接收一个或多个参数,返回一个结果。

(一)存储函数的语法结构

CREATE [ OR REPLACE ] FUNCTION '函数名称'('参数名称1' '参数类型1', '参数名称2' '参数类型2', ...)
RETURN '结果变量数据类型'
IS | AS
	'变量声明部分';
BEGIN
	'逻辑部分';
   	RETURN '结果变量';
[EXCEPTION '异常处理部分']
END;

(二)案例

1.输入ID,返回NAME

create or replace function myFunc(f_id number)
    return varchar2
    is
    result_name varchar2(32);
begin
    select name into result_name from DEMO where ID = f_id;
    return result_name;
end;

select myFunc(25) from DUAL;

2.传入数字,能够被2整除就是偶数,不能被2整除的就是奇数

create or replace function checkNumber(num number)
    return varchar2
as
    resultStr varchar2(32);
    temp      number ;
begin
    temp := mod(num, 2);
    if temp = 1 then
        resultStr := '奇数';
    ELSE
        resultStr := '偶数';
    end if;
    return resultStr;
end;

SELECT checkNumber(10) from DUAL;-- 偶数
SELECT checkNumber(17) from DUAL;-- 奇数

3.对两个数字求和,对和判断奇偶数

1) 写法一:

create or replace function sumNumber(num1 number, num2 number)
    return varchar2
as
    resultStr varchar2(32);
    temp      number;
begin
    temp := (num1 + num2);
    temp := mod(temp, 2);
    if temp = 1 then
        resultStr := '奇数';
    ELSE
        resultStr := '偶数';
    end if;
    return resultStr;
end;

2)写法二:

create or replace function checkSumValue(num1 number, num2 number)
    return varchar2
as
    resultStr varchar2(32);
    temp      number;
begin
    temp := mod((num1 + num2), 2);
    if temp = 1 then
        resultStr := '奇数';
    ELSE
        resultStr := '偶数';
    end if;
    return resultStr;
end;

3)写法三:

create or replace function checkSumValue2(num1 number, num2 number)
    return varchar2
as
    resultStr varchar2(32);
    temp      number;
begin
     temp:=num1+num2;
     if mod(temp,2)=0 then
     resultStr:='偶数';
     ELSE
            resultStr:='奇数';
        end if;
        return resultStr;
end;

结果验证:-- 工资>3000元的员工数量,如果只有一个人,则输出"有一位员工薪资大于3000"
-- 如果大于一个人则输出"有?员工薪资大于3000"
-- 否则输出"没有人薪资大于3000"

SELECT CHECKSUMVALUE2(7,8) FROM DUAL;-- 奇数
SELECT CHECKSUMVALUE2(11,1) FROM DUAL; -- 偶数

4.判断SCOTT用户下,工资大于3000的员工

-- 工资>3000元的员工数量,如果只有一个人,则输出"有一位员工薪资大于3000"
-- 如果大于一个人则输出"有?员工薪资大于3000"
-- 否则输出"没有人薪资大于3000"

select count(sal)
from scott.EMP
where sal >= 3000;

create or replace function myFunc2
    return varchar2
as
    resultStr   varchar2(32);
    countNumber number;
begin
    select count(sal)
    into countNumber
    from scott.EMP
    where sal >= 3000;
    if countNumber = 1 then
        resultStr := '有一位员工薪资大于3000';
    else
        if countNumber > 1 then
            resultStr := '有' || countNumber || '位员工薪资大于3000';-- 字符串拼接
        else
            resultStr := '没有人薪资大于3000';
        end if;
    end if;
    return resultStr;
end;


select myFunc2() from DUAL;-- 有3位员工薪资大于3000

5.输入部门名称,返回部门员工数量

-- 查询每个部门的员工数量
SELECT D.DNAME, COUNT(E.ENAME)
FROM SCOTT.DEPT D
         LEFT JOIN SCOTT.EMP E ON D.DEPTNO = E.DEPTNO
GROUP BY D.DNAME;

-- 输入部门名称,返回部门有多少人
create or replace function countename(name varchar2)
    return number
as
    num number;
begin
    SELECT t.count into num
    FROM (SELECT D.DNAME, COUNT(E.ENAME) count
          FROM SCOTT.DEPT D
                   LEFT JOIN SCOTT.EMP E ON D.DEPTNO = E.DEPTNO
          GROUP BY D.DNAME) T
    WHERE T.DNAME = name;
    return num;
end;

    SELECT countename('SALES') FROM DUAL;-- 6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

m基于鱼群优化算法的的三维场景下人员疏散系统matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 人工鱼群优化算法,模仿鱼群的行为特点而设计的一种寻优策略。人工鱼群算法(Artificial Fish Swarm Algorithm,AFSA)是Li Xiao-lei在2002年提出的(Yazdani, Toosi, & M…

全网惟一面向软件测试人员的Python基础教程-在Python中怎么干倒字符串?

全网惟一面向软件测试人员的Python基础教程 起点:《python软件测试实战宝典》介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你知道Python代码是怎样运行的吗? 第四章 Python数据类型中有那些故事呢?…

邂逅Vue3和Vue3开发体验

文章目录01-邂逅Vue3和Vue3开发体验Vue3带来的变化如何使用Vue方式一&#xff1a;CDN引入方式二——下载和引入计数器案例原生实现Vue实现MVVMtemplate写法一写法二datamethod其他属性01-邂逅Vue3和Vue3开发体验 Vue3带来的变化 如何使用Vue 方式一&#xff1a;CDN引入 <d…

Hadoop 综合实训(编写ing)

文章目录一&#xff0c;显示文件内容&#xff08;一&#xff09;启动hadoop服务&#xff08;二&#xff09;创建并上传本地文件&#xff08;1&#xff09;创建students.txt文件&#xff08;2&#xff09;上传文件到HDFS&#xff08;三&#xff09;创建Maven项目&#xff1a;Dis…

windows11执行python没有任何反应或拉起应用商店的解决办法

1 是什么&#xff08;现象&#xff09; 高高兴兴的用上新电脑&#xff0c;系统Windows11&#xff0c;结果发现用power shell执行python姿势不对。 python bioParser.py 点击Enter&#xff0c;结果秒结束&#xff01;而我的python脚本明明有很多打印&#xff01; 如果只执行py…

服务机器人“大战”进入下半场,竞争焦点变了

对于机器人企业而言&#xff0c;“卖出去”是商业本质。 如何“卖出去”&#xff0c;往往是企业之间的竞争焦点&#xff0c;它也许是技术&#xff0c;也许是营销&#xff0c;但随着服务机器人大战进入下半场&#xff0c;服务机器人的竞争焦点正在发生根本上的改变。 竞争焦点…

Docker:基于Docker对中间件进行配置、安装和使用操作合集

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、rabbitmq启动rabbitmq设置rabbitmq用户进入rabbitmq容器内部设置外界访问用户二、mongodb安装mongo启动mongodb配置及使用mongodb三、Redis1.安装redis2.启动…

同一台服务器上多版本PHP切换(apache2 php8.2 php7.2)

我们有时会在同一台服务器上搭建多个版本的PHP&#xff0c;用来测试不同的程序。可是如何在多个版本之间切换呢&#xff1f;本文以ubuntu1804Server为例给大家进行讲解示范。 环境 ubuntu1804server 4.15.0-200-genericapache2php 7.4php 8.2 1.安装apche2 apache2的安装非…

【项目管理】项目中的进度管理,你知道多少?

有效实施项目进度计划&#xff0c;是项目成功的重要保障&#xff0c;项目进度管理也是每位项目经理都非常重视的问题。 项目中的进度管理可以帮助您了解项目当前进度&#xff0c;估计项目是否能顺利完成。 项目管理就是通过的对知识、技能、工具的运用对项目活动进行管理&am…

星环数据云平台 TDC 3.1 发布,新增滚动重启、存储回收站等八大核心功能

近日&#xff0c;星环数据云平台 Transwarp Data Cloud &#xff08;以下简称 TDC&#xff09;正式推出 3.1 版本。TDC 是采用云原生技术&#xff0c;融合星环科技全系产品打造的统一 PaaS 平台&#xff0c;可以为企业提供数据流通交易平台、企业湖仓一体数据湖、企业数据中台、…

Redis框架(十四):大众点评项目 基于Redis实现点赞功能实现

大众点评项目 基于Redis的点赞功能实现需求&#xff1a;基于Redis实现点赞功能实现业务实战总体代码展示总结SpringCloud章节复习已经过去&#xff0c;新的章节Redis开始了&#xff0c;这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则 基础实战的Demo和Coding…

解读一个四路组相联cache代码

解读一个四路组相联cache代码 在《计算机组成原理&#xff0c;软硬件接口》中&#xff0c;第五章便是cache的学习。本人初学cache&#xff0c;难免有疏漏之处&#xff0c;源代码github地址&#xff1a;https://github.com/airin711/Verilog-caches 1、四路组相联cache主要特征…

Milvus 2.1.x 到 Milvus 2.2.x 升级实践

近日&#xff0c;Milvus 2.2.0 发布&#xff0c;新版本里支持了许多激动人心的功能&#xff0c;包括&#xff1a;磁盘索引&#xff08;DiskANN&#xff09;、从文件中批量导入数据&#xff08;bulk_insert&#xff09;、基于角色的访问控制&#xff08;RBAC&#xff09;、集合生…

Linux | 网络概念理解 | 对网络的初始

文章目录重新看待计算机体系结构软件分层的思想网络中的分层协议的理解局域网的理解MAC地址 && IP地址报头的作用端口号&#xff08;port&#xff09;重新看待计算机体系结构 计算机由硬件组成&#xff0c;而不同硬件之间要怎么通信&#xff0c;或者说要怎么进行数据的…

MySQL——count(*)的底层实现以及相关优化

在开发系统的时候&#xff0c;可能需要需要计算一个表的行数这时候你可能会想&#xff0c;一条 select count(*) from t 语句不就解决了吗&#xff1f; 但是&#xff0c;会发现随着系统中记录数越来越多&#xff0c;这条语句执行得也会越来越慢。然后可能就想了&#xff0c;My…

盘点2022企业网络安全的七大成功要素

网络安全弹性已成为企业的重中之重&#xff0c;高达62%的受访企业在过去两年中经历了影响业务的安全事件。 最流行的四大攻击事件类型是&#xff1a; 1)网络或数据泄露&#xff08;51.5%&#xff09; 2)网络或系统中断&#xff08;51.1%&#xff09; 3)勒索软件事件&#x…

openpnp - 软件调试环境搭建

文章目录openpnp - 软件调试环境搭建概述笔记openpnp官方站点将openpnp工程克隆到本地将openpnp的wiki工程克隆到本地查看openpnp开发指南根据openpnp开发指南搭建openpnp开发环境IDE的选择IntelliJ IDEA学习版的安装引入openpnp工程在IDEA中, 运行openpnp主程序配置IntelliJ I…

工业手持终端并非“单兵作战”,5G智能模组时刻在线赋能

随着智能终端技术的不断演进&#xff0c;稳定性、实时性和续航能力强的工业手持终端为移动通信、消费电子、工业信息采集等领域提供便捷、高效的数据采集、存储、传输等功能服务。在智慧物流、智慧零售、智能制造、智慧医疗等领域&#xff0c;工业手持终端仍表现出需求激增、功…

Neuron 2.3.0 发布:更轻松地接入和管理海量工业设备

Neuron 2.3.0 版本现已正式发布&#xff01; 除了新增数据统计、模糊搜索、页面下载日志等功能提升产品易用性外&#xff0c;Neuron 2.3.0 版本还新增了 CIP Ethernet/IP、Mitsubishi Melsec 1E frame E71 和 Fanuc Focas 三个协议驱动&#xff0c;以更强大的能力帮助工业用户…

chatgpt使用教程

** 使用门槛&#xff1a;需要自行准备能开全局代理的科学上网工具 好评赠送免费科学上网工具&#xff0c;也可以自己准备科学工具。 ** 下单以后&#xff0c;我们会发送一串账号密码给您。如图&#xff1a; 其中卡号就是chatgpt的账号&#xff0c;密码就是chatgpt密码。 第…