PLSQL程序块中的无名块

文章目录

  • PLsql ---过程化语言
  • 程序块:
    • 无名块
      • 变量
        • 利用 select into 语句给变量赋值
      • 打印输出
      • 手动输入
        • 变量类型
          • 引用型变量类型
            • %TYPE
            • %ROWTYPE
          • 记录型变量类型
    • 在程序块下的增删改
      • RETURNING INTO
        • 增加数据
        • 修改数据
        • 删除数据

PLsql —过程化语言

程序块
plsql是Oracle默认的核心语言
是SQL的进阶。
plsql的核心是循环 判断 变量

程序块:

无名块

没有名字,只能执行一次,不能保存
无名块的结构

DECLARE       --1.声明部分(可选)--声明变量,变量类型,游标
BEGIN         --2.执行部分(核心)--能直接使用dml语句--能直接使用tcl语句(commit,rollback)--可以使用select into 语句--不能直接使用ddl语句,可以通过动态sql来实现ddl语句--循环,判断EXCEPTION   --3.异常处理部分(可选)
END;          --4.结束部分 

变量

.
变量是用来接受可变动的值的
声明变量:

DECLARE变量名1 变量类型;变量名2 变量类型;	--程序块中,每完成一句话都要有分号
BEGIN
END;

给变量赋值:
1.在BEGIN后面用 赋值符号 := 给变量赋值
2.在DECLARE后面用赋值符号 := 给变量赋值
例题,打印输出你好CSDN
3.利用 select into 语句给变量赋值

DECLAREV_a varchar2(20);V_b varchar2(20) :='HELLO www'
BEGIN V_a :='你好CSDN';dbms_output.put_line(V_a);dbms_output.put_line(V_b);
END;

在这里插入图片描述

练习:打印输出hello world

DECLAREV_hellow varchar2(20);
BEGIN
dbms_output.put_line(V_hellow);
END;

变量名命名规范:
1.要见名知意
2.必须以字母开头,不要用除了_以外的特殊符号

利用 select into 语句给变量赋值
DECLARE 变量1 变量类型;
BEGINSELECT 列名1 INTO 变量1 FROM 表名 WHERE 条件--将SQL查询语句的结果交给变量,注意结果只能是一行结果--变量的个数,顺序,属性要和列一致
END;

例题:打印输出7788的员工姓名和岗位

DECLARE E_name varchar2(20);E_job varchar2(20);
BEGINSELECT ename,jobINTO E_name,E_jobFROM empwhere empno = 7788;dbms_output.put_line(E_name||E_job);
END;

练习:
1.打印输出10号部门平均工资

DECLARE avg_sal NUMBER;
BEGIN SELECT AVG(sal) INTO avg_sal FROM emp WHERE deptno = 10 GROUP BY deptno;dbms_output.put_line(avg_sal);
END;

2.打印输出7788 的员工的姓名岗位薪资部门编号部门名称以及对应的部门平均工资

DECLAREE_name VARCHAR2(20);E_job VARCHAR2(20);E_sal NUMBER;E_deptno NUMBER;E_D_name VARCHAR2(20);E_D_avgsal NUMBER;
BEGIN SELECT A.ENAME, A.JOB, A.SAL, A.DEPTNO, B.DNAME, C.AINTO E_NAME, E_JOB, E_SAL, E_DEPTNO, E_D_NAME, E_D_AVGSALFROM EMP ALEFT JOIN DEPT BON A.DEPTNO = B.DEPTNOLEFT JOIN (SELECT AVG(SAL) A, DEPTNO FROM EMP GROUP BY DEPTNO) CON A.DEPTNO = C.DEPTNOWHERE a.empno = 7788;dbms_output.put_line(E_NAME|| E_JOB||E_SAL||E_DEPTNO||E_D_NAME|| E_D_AVGSAL);
END;

打印输出

1.换行输出:

dbms_output.put_line(1个参数)

2.不换行输出:

dbms_output.put(1个参数)

注意:不换行输出结果后面一定要跟一个换行输出

手动输入

&
例题:手动输入一个员工编号 输出该员工姓名

DELCAREV_ename varchar2(20);V_empno number :'&请输入';      --最好加上单引号--提示词不能一样
BEGIN END;

练习:输入一个部门编号返回该部门的工资最高的员工的姓名

DECLAREV_NAME VARCHAR2(20);D_deptno NUMBER :='&请输入';
BEGINSELECT ENAMEINTO V_NAMEFROM EMPWHERE SAL = (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = D_DEPTNO) AND deptno = D_DEPTNO;
dbms_output.put_line(V_NAME);
END;

练习:输入一个员工编号,打印输入该员工所在部门平均工资以及该员工姓名和岗位以及部门名称

DECLAREV_empno NUMBER :='&请输入';V_avgsal NUMBER;V_ename VARCHAR2(20);V_job VARCHAR2(20);V_dname VARCHAR(20);
BEGINSELECT c.al,a.ename,a.job,b.dname INTO V_avgsal,V_ename,V_job,V_dname FROM EMP ALEFT JOIN DEPT BON A.DEPTNO = B.DEPTNOLEFT JOIN (SELECT AVG(SAL) Al, DEPTNO FROM EMP GROUP BY DEPTNO) CON A.DEPTNO = C.DEPTNOWHERE empno = V_empno;dbms_output.put_line(V_avgsal||'-'||V_ename||'-'||V_job||'-'||V_dname);      
END;
变量类型
引用型变量类型
%TYPE

是一个引用型变量类型,可以引用某张表的某个列的属性,也可以引用已经定义好的变量类型
优点:
1.可以不用知道引用的列的属性
2.可以跟随引用的列的属性变化而变化。
例题:
查询7788员工的姓名,岗位,薪资,入职日期以及部门编号

DECLARE V_ename emp.ename%TYPE;      --引用emp表的ename字段的属性  表名.列名%TYPEV_job emp,job%TYPE;V_sal emp.sal%TYPE;V_hiredate emp.hiredate%TYPE;V_deptno V_sal%TYPE          --引用已经定义好的变量类型,变量%TYPE
BEGINselect ename,job,sal,hiredate,deptno into V_ename,V_job,V_sal,V_hiredate,V_deptnofrom emp where empno =7788;dbms_output.put_line(...)
END;

练习:输入一个员工编号打印输出该员工的员工信息以及该员工对应的工资等级

DECLAREV_empno NUMBER:='&请输入';V_ename emp.ename%TYPE;V_job emp.job%TYPE;V_hiredate emp.hiredate%TYPE;V_sal emp.sal%TYPE;V_comm emp.comm%TYPE;V_deptno emp.deptno%TYPE;V_MGR emp.MGR%TYPE;V_grade salgrade.grade%TYPE;BEGINSELECT A.ENAME, A.JOB, A.HIREDATE, A.SAL, A.COMM, A.DEPTNO, A.MGR, B.GRADEINTO V_ENAME,V_JOB,V_HIREDATE,V_SAL,V_COMM,V_DEPTNO,V_MGR,V_GRADEFROM EMP ALEFT JOIN SALGRADE BON A.SAL BETWEEN B.LOSAL AND B.HISALWHERE a.empno = V_empno;
dbms_output.put_line( V_ENAME||'-'||V_JOB||'-'||V_HIREDATE||'-'||V_SAL||'-'||V_COMM||'-'||V_DEPTNO||'-'||V_MGR||'-'||V_GRADE);      
END;
%ROWTYPE

是一个引用型变量类型,可以引用每张表的一行的字段属性
优点:
1.可以不用知道引用的列的属性
2.可以跟随引用的列的属性变化而变化。
例题:查询7788号员工的姓名行尾薪资部门编号以及入职日期

DECLAREV_a emp%ROWTYPE;         ---引用emp表一行的字段属性--表名%ROWTYPE--V_a   是一个复合变量,很多小变量的集合,此时包含了V_a.empno,V_a.ename,V_a.job....
BEGINselect ename,job,sal,deptno,hiredateinto V_a.ename,V_a.job,V_a.sal,V_a.deptno,V_a.hiredateFROM empWHERE empno = 7788;
dbms_output.put_line(V_a.ename||V_a.job||V_a.sal||V_a.deptno||V_a.hiredate);
END;

练习:打印输出史密斯的员工信息以及对应的部门平均工资

DECLAREV_A emp%ROWTYPE;V_avgsal emp.sal%TYPE;
BEGIN
SELECT A.EMPNO, A.ENAME, A.JOB, A.HIREDATE, A.SAL, A.COMM, A.DEPTNO, B.AAINTO V_A.EMPNO,V_A.ENAME,V_A.JOB,V_A.HIREDATE,V_A.SAL,V_A.COMM,V_A.DEPTNO,V_AVGSALFROM EMP ALEFT JOIN (SELECT AVG(SAL) AA, DEPTNO FROM EMP GROUP BY DEPTNO) BON A.DEPTNO = B.DEPTNOWHERE A.ENAME = 'SMITH';dbms_output.put_line( V_a.EMPNO||'-'||V_a.ENAME||'-'||V_a.job||'-'||V_a.HIREDATE||'-'||V_a.SAL||'-'||V_a.COMM||'-'||V_a.DEPTNO||'-'||V_avgsal);    
END;
记录型变量类型

RECORD
语法:

DECLARE TYPE 类型名 IS RECODE(变量1 变量类型,变量2 变量类型.....);   --1.声明类型,复合类型变量 类型名                                               --2.声明变量  复合变量, 变量.变量1,变量.变量2,

在这里插入图片描述

练习:输入一个员工编号打印输出该员工的员工信息以及该员工对应的工资等级

DECLARETYPE C1 IS RECORD(E_EMPNO    EMP.EMPNO%TYPE,E_NAME     EMP.ENAME%TYPE,E_JOB      EMP.JOB%TYPE,E_HIREDATE EMP.HIREDATE%TYPE,E_SAL      EMP.SAL%TYPE,E_COMM     EMP.COMM%TYPE,E_DEPTNO   EMP.DEPTNO%TYPE,E_MGR      EMP.MGR%TYPE,E_GRADE    SALGRADE.GRADE%TYPE);V_A     C1;V_EMPNO EMP.EMPNO%TYPE := '&请输入';
BEGINSELECT A.EMPNO,A.ENAME,A.JOB,A.HIREDATE,A.SAL,A.COMM,A.DEPTNO,A.MGR,B.GRADEINTO V_A.E_EMPNO,V_A.E_NAME,V_A.E_JOB,V_A.E_HIREDATE,V_A.E_SAL,V_A.E_COMM,V_A.E_DEPTNO,V_A.E_MGR,V_A.E_GRADEFROM EMP ALEFT JOIN SALGRADE BON SAL BETWEEN LOSAL AND HISALWHERE A.EMPNO = V_EMPNO;DBMS_OUTPUT.PUT_LINE(V_A.E_EMPNO || '-' || V_A.E_NAME || '-' ||V_A.E_JOB || '-' || V_A.E_HIREDATE || '-' ||V_A.E_SAL || '-' || V_A.E_COMM || '-' ||V_A.E_DEPTNO || '-' || V_A.E_MGR || '-' ||V_A.E_GRADE);END;

在程序块下的增删改

RETURNING INTO

增加数据

INSERT

DECLARE
BEGININSERT INTO emp(empno,ename) VALUES(1,'小明');
END;

RETURNING
是将dml语句影响的值返回交给变量
RETURNING 列名1,列名2 … INTO 变量1,变量2

DECLAREV_name varchar2(20);V_empno number;
BEGININSERT INTO emp(empno,ename) VALUES(1,'小明')RETURNING empno,ename into V_empno,V_name;
END;

插入时,RETURNING接受的是插入的值

修改数据
DECLAREV_sal number;
BEGINUPDATE emp set sal = 666 where empno = 7788RETURNING sal into V_sal;
END;

在修改时,RETURNING INTO 是将修改后的值交给变量。

删除数据
DECLAREV_ENAME EMP.ENAME%TYPE;
BEGINDELETE FROM EMP WHERE EMPNO = 1 RETURNING ENAME INTO V_ENAME;
END;

在删除时,RETURNING INTO 是将删除的值交给变量。

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

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

相关文章

单细胞+RIP-seq项目文章| Cell ReportshnRNPU蛋白在小鼠精原干细胞池建立的关键作用

精原干细胞(SSCs)是负责精子发生的干细胞,具有自我更新和分化产生功能性精子的能力。SSCs的持续再生对于维持雄性生育力至关重要。然而,SSC池的发育起源尚不清楚。在哺乳动物中,SSCs源自名为 prospermatogonia&#xf…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

微服务两种方式登录

目录 1.restTemplate方式 1.1页面 1.2消费者 1.3生产者 1.4效果 2.Feign方式 2.1Service 2.2生产者 三个生产者 一个消费者,三个生产者需要用mysqlmybatis 三个不同的数据库。 页面输入用户名和密码,提交到后端消费者,消费者传到生产…

RabbitMQ入门实战

文章目录 RabbitMQ入门实战基本概念安装快速入门单向发送多消费者 RabbitMQ入门实战 官方:https://www.rabbitmq.com 基本概念 AMQP协议:https://www.rabbitmq.com/tutorials/amqp-concepts.html 定义:高级信息队列协议(Advanc…

让流程图动起来

我们平时画流程,然后贴到文档,就完事了。但是过程演示的时候,如果只是一张静态图,很难吸引到听众的注意力,表达效果并不太好。常用的方法是可以用PPT进行动态演示,做PPT也是需要花一些时间,同时…

7、OpenCompass 大模型评测实战

0、为什么要研究大模型的评测? 首先,研究评测对于我们全面了解大型语言模型的优势和限制至关重要。尽管许多研究表明大型语言模型在多个通用任务上已经达到或超越了人类水平,但仍然存在质疑,即这些模型的能力是否只是对训练数据的…

【数据结构(邓俊辉)学习笔记】向量01——接口与实现

文章目录 0.意图1、概述2 从数组到向量3 向量ADT接口4 Vector 模板类5 构造与析构5.1默认构造方法5.2基于复制的构造方法5.3 析构方法 0.意图 一方面是将工作学习中零星的知识点串起来,另一方面向量是其他数据类型的基础,比如栈队列等,所以基…

分享4张亚马逊云科技AWS免费云开发和AI证书(有答案)

今天给大家带来特别福利,一口气带来亚马逊云科技AWS4张免费云开发/AI证书(有Credly徽章,有答案),这四门都是云开发相关的硬核知识,含金量极高。 主要考察如何用AWS AI服务进行开发、以及当下热门的云原生改造,16道题80…

.NET 高级开发人员面试常见问题及解答

当面试.NET高级开发人员时,面试官通常会围绕技术深度、问题解决能力、项目经验以及编程理念等方面提出问题。以下是20个常见的面试问题及其详细解答: 问题:请简述ASP.NET MVC的工作原理? 解答:ASP.NET MVC是一个基于MV…

哪家券商有快速通道?

其实我们日常股票交易我们就是在单纯的股票交易,却没有了解过,那些私募,游资,打板为什么还能比我们更快,这些都是来源与快速通道。今天小编带你们一起来科普下!一:提高交易速度,主要…

Skill Check: Build an LLM Application using OCI Generative AI Service

Skill Check: Build an LLM Application using OCI Generative AI Service

const enum inline去替代宏

在C中,const、enum和inline关键字可以用来替代宏(#define)的一些功能,以提高代码的安全性和可维护性。以下是它们的用途和如何使用它们来替代宏: const const关键字用于定义常量。它不仅可以定义整数常量,…

基于模糊控制的电动汽车锂电池SOC主动均衡电路MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 模型在 Matlab/Simulink仿真平台中搭建16节电芯锂电池电路模型,主要针对电动车锂电池组SOC差异性,采用模糊控制算法动态调节均衡电流,以减少均衡时间和能量损耗。…

Python全栈开发前端与后端的完美融合

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在当今互联网时代,全栈开发已经成为了一种趋势。全栈开发者具备前端和后端开发的…

java Web-Spring AOP

AOP的概念 AOP:面向切面编程,面向方法编程。简单理解就是对特定方法的扩充的思想 例如我们要在特定方法进行方法的执行时间判断,我们假如去使用在每个方法去进行业务逻辑扩充,这样就太繁琐了,而使用AOP就可以简化操作。Spring A…

Pytorch 学习路程 - 1:入门

目录 下载Pytorch 入门尝试 几种常见的Tensor Scalar Vector Matrix AutoGrad机制 线性回归尝试 使用hub模块 Pytorch是重要的人工智能深度学习框架。既然已经点进来,我们就详细的介绍一下啥是Pytorch PyTorch 希望将其代替 Numpy 来利用 GPUs 的威力&…

Python网络爬虫项目开发实战:怎么处理下载缓存

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python网络爬虫项目开发实战_下载缓存_编程案例解析实例详解课程教程.pdf 一、下载缓存的简介 在网络爬虫项目开发中,下载缓存是一个重要的优化手段,…

.net6项目模板搭建教程

1.集成log4net 安装如下扩展依赖即可,已经包含了log4net依赖: Microsoft.Extensions.Logging.Log4Net.AspNetCore 添加日志配置文件: 日志配置文件属性设置为始终复制: 注入服务: #region 注入log4net日志服务build…

2024年高校辅导员考试题库及答案

一、选择题 4.根据宪法和法律,可以制定行政法规的是:() A.全国人民代表大会; B.全国人民代表大会常务委员会; C.国务院; D.国家教育部 答案:C …

一年期免费SSL证书正在消失?这里还有

在数字化时代,数据安全与隐私保护的重要性不言而喻。SSL(Secure Sockets Layer)证书作为保障互联网通信安全的关键工具,其有效期一直是业界关注的焦点。近年来,我们见证了免费一年期SSL证书向三个月有效期的转变&#…