ORACLE中的无名块

@[TOP]

  	在 Oracle PL/SQL 中,无名块(Anonymous Block)是一种可以立即执行的代码段, 它没有名字,因此不能被复用。
  	无名块通常用于执行一次性的任务,比如临时查询数据库、执行 DML 操作等。
  	它们通常直接在 SQL*Plus 或者其他 PL/SQL 编辑器中编写并执行。       

一、无名块的结构

DECLARE
    -- 变量声明
    变量名 变量类型;
BEGIN --执行部分,(核心)
    -- SQL 语句或者 PL/SQL 逻辑
    变量名 :=;

    -- 执行 SQL 语句的例子
    INSERT INTO table_name (column1, column2) VALUES (value1, value2);

    -- 提交事务
    COMMIT;

EXCEPTION --可选
    -- 处理异常情况
    WHEN others THEN
        -- 发生错误时的操作
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;

二、变量

    变量是用来接收可变动的值,只能接收一个值。

1、变量命名规范

    1). 要见名知意 ;
    2). 必须以字母开头,并且不要用除了_以外的特殊符号

声明变量:

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

--例:打印输出 hello world
DECLARE
 V_a   VARCHAR2(30);

BEGIN
  V_a := 'Hello World';
  dbms_output.put_line(V_a); --打印输出
 
END;

在这里插入图片描述

2、给变量赋值

    1). 在 BEGIN  后面 用 赋值符号 :=   给变量赋值

    2). 在 declare  后面 用 赋值符号 :=   给变量赋值
DECLARE
 V_a VARCHAR2(30):='HELLO WORLD';  ---初始值
 
BEGIN
 
  dbms_output.put_line(V_a); --打印输出V_a
  
END;

在这里插入图片描述

3、利用 SELECT INTO 语句 给变量赋值

--语法
DECLARE
 变量1  变量类型;
 ......
BEGIN
  SELECT 列名1, ...... INTO 变量1...... FROM 表名 ..... WHERE 条件........;
  
  ---将sql查询语句的结果交给变量,注意只能是一行结果
  ---变量的个数 顺序 属性 要和列一致
END;

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

DECLARE
 V_ename VARCHAR2(30);
 V_job   VARCHAR2(30);

BEGIN
  SELECT  ename,job 
   INTO V_ename , V_job 
   FROM  emp 
    WHERE empno=7788;
 --dbms_output.put_line(v_ename || V_job );  --打印多个值需用||连接
 --为了美观可以拼接' '
 dbms_output.put_line(v_ename ||' '|| V_job );
END;

结果:
在这里插入图片描述

例2:打印输出 10号部门平均工资

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

结果:
在这里插入图片描述

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

DECLARE
 V_ename VARCHAR2(30);
 V_job  VARCHAR2(30);
 V_sal  NUMBER;
 V_deptno NUMBER;
 V_dname VARCHAR2(30);
 V_avgsal NUMBER;

BEGIN
SELECT ENAME,
       JOB,
       SAL,
       A.DEPTNO,
       DNAME,
       (SELECT AVG(SAL) FROM EMP B WHERE B.DEPTNO = A.DEPTNO)
       
     INTO  V_ename,V_job,V_sal,V_deptno,V_dname,V_avgsal
  FROM EMP A
  LEFT JOIN DEPT
    ON A.DEPTNO = DEPT.DEPTNO
 WHERE EMPNO = 7788;
  dbms_output.put_line(V_ename||' '||V_job||' '||V_sal||' '||V_deptno||' '||V_dname||' '||V_avgsal);
  
END;

结果:
在这里插入图片描述

三、打印输出

1.换行输出

 打印输出结束后会另起一行:
 dbms_output.put_line()

例:

DECLARE
 V_a NUMBER:=123;
BEGIN
  dbms_output.put_line(V_a); 
END;

结果:
在这里插入图片描述

2. 不换行输出

 打印输出完之后不换行
 注意不换行输出结果后面一定要跟一个换行输出,否则没有结果
 dbms_output.put(1个参数);

例:不跟换行

DECLARE
 V_a NUMBER:=123;
BEGIN
  dbms_output.put(V_a);
  
END;

结果:可以看到没有输出内容
在这里插入图片描述
不换行后跟换行:

DECLARE
 V_a NUMBER:=123;
BEGIN
  dbms_output.put(V_a);
  dbms_output.put_line('');
  
END;

结果:可以看到有结果输出
在这里插入图片描述

四、手动输入 &

​例1:手动输入一个员工编号 输出该员工的姓名

DECLARE
 V_ename VARCHAR2(30);
 
 V_empno NUMBER :='&请输入';
 ---最好加上单引号
  ---提示词不能一样
BEGIN
  SELECT ename 
   INTO v_ename 
    FROM emp 
     WHERE empno=V_empno;

 dbms_output.put_line(v_ename );
 
END;

结果:
在这里插入图片描述
在这里插入图片描述
例2:输入一个部门编号返回该部门的工资最高的员工的姓名

DECLARE
  V_DEPTNO NUMBER := '&请输入';
  V_ENAME  VARCHAR2(30);

BEGIN
  SELECT ENAME
   INTO  V_ename 
    FROM EMP
   WHERE SAL = (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = V_DEPTNO)
     AND DEPTNO = V_DEPTNO;

 dbms_output.put_line(V_ename);
 
END;

结果:
在这里插入图片描述
在这里插入图片描述
例3:输入一个员工编号 打印输出该员工所在部门平均工资 以及该员工姓名和岗位以及部门名称

DECLARE
 V_empno NUMBER:='&请输入';
 V_avgsal NUMBER;
 V_ename VARCHAR2(30);
 V_job VARCHAR2(30);
 V_dname VARCHAR2(30);
 
BEGIN
SELECT ENAME,
       JOB,
       DNAME,
       (SELECT AVG(SAL) FROM EMP B WHERE B.DEPTNO = A.DEPTNO)
    INTO V_ename,V_job,V_dname,V_avgsal
  FROM EMP A
  LEFT JOIN DEPT
    ON A.DEPTNO = DEPT.DEPTNO
 WHERE EMPNO =V_empno;

dbms_output.put_line(V_ename||' '||V_job||' '||V_dname||' '||V_avgsal);

END;

结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值