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

#王者杯·14天创作挑战营·第2期#

目录

一、变量

1.什么是变量 

2.定义变量的语法

3.变量的赋值

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

二、输入输出

1.&符号表示输入

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

三、变量赋值 SELECT INTO

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

1.%TYPE

2.%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;

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷神乐乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值