Oracle变量、输入输出、SELECT INTO、%TYPE与%ROWTYPE详解

 更新时间:2025年06月09日 10:56:04   作者:雷神乐乐  
这篇文章主要介绍了Oracle变量、输入输出、SELECT INTO、%TYPE与%ROWTYPE,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、变量

1.什么是变量

在 Oracle 数据库里,变量发挥着重要作用,它能够存储中间值、传递数据以及增强 SQL 和 PL/SQL 代码的灵活性。

2.定义变量的语法

DECLARE
 
  --声明的地方(声明变量,常量,游标等等),这一块不是必须的。
BEGIN

  --代码的执行的逻辑块(就是要做什么) 
END;
BEGIN
  dbms_output.put_line('你好');
END;

BEGIN
  dbms_output.put_line('Hello World');
  dbms_output.put_line('你好');
END;

3.变量的赋值

DECLARE
  v1 varchar2(20);
  v2 date;
BEGIN
  v1 := 'Hello';
  dbms_output.put_line(v1);
  v2 := to_date('20220101', 'yyyymmdd');
  dbms_output.put_line(v2);
END;

日期格式是按照国外的格式输出的

4.变量可以被多次赋值,可以被覆盖

DECLARE
  v1 varchar2(20);
BEGIN
  v1 := 'Hello';
  -- dbms_output.put_line(v1);
  v1 := '你好';
  dbms_output.put_line(v1);
END;

dbms_output包主要用于调试pl/sql程序

一个变量的赋值,可以在 DECLARE 中赋初始值,也可以在 BEGIN END中进行赋值,一个变量也可以重复赋值。

练习 : 打印 数字 10 以及 打印 当前年月日 'YYYY-MM-DD'

-- 方法一:
DECLARE
  v1 number;
  v2 varchar2(20);
BEGIN
  v1 := 10;
  dbms_output.put_line(v1);
  v2 := TO_CHAR(SYSDATE, 'YYYY-MM-DD');
  dbms_output.put_line(v2);
END;

-- 方法二:
DECLARE
  v1 number := 10;
  v2 varchar2(20) := TO_CHAR(SYSDATE, 'YYYY-MM-DD');
BEGIN
  dbms_output.put_line(v1 || chr(10) || v2);
END;

chr(10)表示换行

二、输入输出

1.&符号表示输入

  • 变量来源于用户输入值
  • &后面接变量值名称

示例:用户输入一个数字,输出它的三次幂(例如:用户输入2,返回8)

DECLARE
  v1 number := &input; -- 变量值名称可自定义
  v2 number;
BEGIN
  v2 := power(v1, 3);
  -- v2:=v1*v1*v1;
  dbms_output.put_line(v2);
END;

2.关于赋值的数据类型说明

  • 如果赋值的变量是字符串类型,那么在弹出的小窗口上传值的时候,记得添加 单引号
  • 如果赋值的变量是DATE类型,那么在弹出的小窗口上传值的时候,要用 TO_DATE 这个函数转换数据类型

示例:用户输入两个变量并打印出来,一个字符串类型,一个是日期型

DECLARE
  v1 varchar2(20) := '&input1';
  v2 DATE := &input2;
BEGIN
  dbms_output.put_line(v1 || CHR(10) || v2);
END;

练习:打印用户输入的两个值的 加减乘除 对应的值(6,3)

DECLARE
  v1 number := &input1;
  v2 number := &input2;
BEGIN
  dbms_output.put_line(v1 + v2);
  dbms_output.put_line(v1 - v2);
  dbms_output.put_line(v1 * v2);
  dbms_output.put_line(v1 / v2);
END;

三、变量赋值 SELECT INTO

  • 注意:select后面有几个值,into后面就要有相对应的变量,注意数据类型要一致。

示例:打印某个员工的薪资(用户输入工号,打印他的薪资)

DECLARE
  v1    number := &input;
  v_sal number;
BEGIN
  select sal into v_sal from emp where empno = v1;
  dbms_output.put_line(v_sal);
END;

示例:接收一个员工的编号,将员工的姓名,工资,入职日期打印出来

DECLARE
  v1         number := &input;
  v_ename    varchar2(20);
  v_sal      number;
  v_hiredate date;
BEGIN
  select ename, sal, hiredate
    into v_ename, v_sal, v_hiredate
    from emp
   where empno = v1;
  dbms_output.put_line(v_ename || ',' || v_sal || ',' || TO_CHAR(v_hiredate, 'YYYY-MM-DD'));
END;

练习1:输入一个部门编号,打印这个部门的平均薪资(保留两位小数)

输出样式:10号部门的平均薪资为:2916.67

DECLARE
  v1        number := &input;
  v_avg_sal number;
BEGIN
  select round(avg(sal + nvl(comm, 0)),2) avg_sal
    into v_avg_sal  
    from emp
   where deptno = v1
   group by deptno;
  dbms_output.put_line(v1 || '号部门的平均薪资为:' || v_avg_sal);
END;

练习2:写一个代码块,传入一个员工姓名,将这个员工的工号,岗位打印到 OUTPUT 窗口来

DECLARE
  v1      varchar2(20) := '&input';
  v_empno number;
  v_job   varchar2(20);
BEGIN
  select empno, job into v_empno, v_job from emp where ename = v1;
  dbms_output.put_line(v_empno || ',' || v_job);
END;

四、使用%TYPE与%ROWTYPE无需写变量数据类型

  • %TYPE:引用数据库中的某张表的某列的数据类型。
  • %ROWTYPE:引用数据库中的某张表的一行(所有字段)作为数据类型。

1.%TYPE

示例:接收一个员工的编号,将员工的姓名,工资,入职日期打印出来

DECLARE
  v_EMPNO    EMP.EMPNO%TYPE := &input;
  v_ENAME    EMP.ENAME%TYPE;
  v_SAL      EMP.SAL%TYPE;
  v_HIREDATE EMP.HIREDATE%TYPE;
BEGIN
  select ENAME, SAL, HIREDATE
    into v_ENAME, v_SAL, v_HIREDATE
    from EMP
   where EMPNO = v_EMPNO;
  dbms_output.put_line(v_ENAME || '的薪资是:' || v_SAL || '入职时间:' ||
                       TO_CHAR(v_HIREDATE,'YYYY-MM-DD'));
END;

2.%ROWTYPE

DECLARE
  v_emp emp%ROWTYPE;
BEGIN
  v_emp.EMPNO := &INPUT;
  select ENAME, SAL, HIREDATE
    into v_emp.ENAME, v_emp.SAL, v_emp.HIREDATE
    from EMP
   where EMPNO = v_emp.EMPNO;
  dbms_output.put_line(v_emp.ENAME || '的薪资是:' || v_emp.SAL || '入职时间:' ||
                       TO_CHAR(v_emp.HIREDATE, 'YYYY-MM-DD'));
END;

练习:写一个代码块,传入一个员工姓名,将这个员工的工号,岗位打印到 OUTPUT 窗口来

将刚才写的两个课堂练习用 %TYPE 和 %ROWTYPE 实现

-- %TYPE
DECLARE
  v_ENAME EMP.ENAME%TYPE := '&input';
  v_EMPNO EMP.EMPNO%TYPE;
  v_JOB   EMP.JOB%TYPE;
BEGIN
  select EMPNO, JOB into v_EMPNO, v_JOB from EMP where ENAME = v_ENAME;
  dbms_output.put_line(v_ENAME || '的工号是:' || v_EMPNO || '岗位是:' || v_JOB);
END;


-- %ROWTYPE
DECLARE
  v_EMP EMP%ROWTYPE;
BEGIN
  v_EMP.ENAME := '&INPUT';
  select EMPNO, JOB
    into v_EMP.EMPNO, v_EMP.JOB
    from EMP
   where ENAME = v_EMP.ENAME;
  dbms_output.put_line(v_EMP.ENAME || '的工号是:' || v_EMP.EMPNO || '岗位是:' ||
                       v_EMP.JOB);
END;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Oracle19c安装与基本配置教程(超详细!)

    Oracle19c安装与基本配置教程(超详细!)

    oracle19c数据库安装相对于oracle12c安装还是有些不一样的,所以今天再来记录一下安装过程,下面这篇文章主要给大家介绍了关于Oracle19c安装与基本配置的超详细教程,需要的朋友可以参考下
    2023-01-01
  • oracle实现新建用户并授权

    oracle实现新建用户并授权

    本文主要介绍了在Oracle数据库中创建、删除用户以及授权角色的方法,用户可以通过system或sys用户创建其他用户,并且可以更改密码或删除用户,系统提供了三种标准角色:connect、resource和dba,分别赋予不同的权限,用户还可以创建自定义角色,并为其分配权限
    2026-01-01
  • Oracle使用dblink实现跨库访问的实例代码

    Oracle使用dblink实现跨库访问的实例代码

    dbLink是简称,全称是databaselink,database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序,本文给大家介绍了Oracle如何使用dblink实现跨库访问,需要的朋友可以参考下
    2024-03-03
  • Oracle 系统变量函数用法指南

    Oracle 系统变量函数用法指南

    在Oracle数据库中,Oracle系统变量函数是经常会使用到的函数,分享下Oracle系统变量函数的用法。希望对大家有所帮助
    2014-08-08
  • oracle impdp network_link参数使用介绍

    oracle impdp network_link参数使用介绍

    本文将介绍oracle impdp network_link参数使用方法,需要了解更多的朋友可以参考下
    2012-11-11
  • Oracle数据库由dataguard备库引起的log file sync等待问题

    Oracle数据库由dataguard备库引起的log file sync等待问题

    这篇文章主要介绍了Oracle数据库由dataguard备库引起的log file sync等待,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • oracle导入导出某个schema数据的步骤

    oracle导入导出某个schema数据的步骤

    这篇文章主要介绍了oracle导入导出某个schema数据的步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • oracle数据库数据检查方法步骤记录

    oracle数据库数据检查方法步骤记录

    这篇文章主要介绍了检查Oracle数据库运行状况的步骤,包括数据库实例状态、性能指标、监控和警报、日志检查、备份和恢复、安全性以及数据完整性检查,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Oracle 安装和卸载问题收集(集合篇)

    Oracle 安装和卸载问题收集(集合篇)

    在安装过程中出现的一些问题的解决办法。值得收藏与学习。比如在安装的时候如果有中文的路径则会出现类似这样的提示:加载数据库时出错:areasQueries
    2009-06-06
  • oracle中的一些常用函数及示例

    oracle中的一些常用函数及示例

    这篇文章主要给大家介绍了关于oracle中的一些常用函数及示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11

最新评论