基本语法
*********************************************************************************************************
1. 打印员工号为186的员工的last_name值

declare
v_last_name employees.last_name%type;
begin
select last_name into v_last_name
from employees
where EMPLOYEE_ID=186;
dbms_output.put_line(v_last_name);
end;

----------------------------------------------------------

2. 打印员工号为186的员工的last_name,email,salary,job_id的值

declare
v_last_name employees.last_name%type;
v_email employees.email%type;
v_salary employees.salary%type;
v_job_id employees.job_id%type;
begin
select last_name,email,salary,job_id
into v_last_name,v_email,v_salary,v_job_id
from employees
where EMPLOYEE_ID=186;
dbms_output.put_line(v_last_name);
dbms_output.put_line(v_email);
dbms_output.put_line(v_salary);
dbms_output.put_line(v_job_id);
end;

----------------------------------------------------------------
记录类型
----------------------------------------------------------------
3.1 自定义记录类型,包括:姓名、员工号。给姓名、员工号赋值,并打印输出

declare
-- 定义记录的类型
type test_rec is record(
name varchar2(10),
id number(4)
);
v_record test_rec; --定义record类型的变量
begin
-- 对变量赋值
v_record.name :='tom';
v_record.id :=123;
dbms_output.put_line(v_record.name||','||v_record.id);
end;

3.2 自定义记录类型,打印员工号186的员工的last_name, email, salary, job_id

declare
-- 定义记录的类型
type test_rec is record(
last_name varchar2(30),
email varchar2(30),
salary number(8,2),
job_id varchar(10)
);
employees_record test_rec; --定义record类型的变量
begin
-- 对变量赋值
select last_name,email,salary,job_id
into employees_record.last_name,
employees_record.email,
employees_record.salary,
employees_record.job_id
from employees
where EMPLOYEE_ID=186;
dbms_output.put_line(employees_record.last_name
||','||employees_record.email
||','||employees_record.salary
||','||employees_record.job_id
);
end;

4. 定义一个记录类型,并使用 %type 定义变量,动态的获取数据的声明类型,打印员工号186的员工的last_name, email, salary, job_id

declare
-- 定义记录的类型
type test_rec is record(
last_name employees.last_name%type,
email employees.email%type,
salary employees.salary%type,
job_id employees.job_id%type
);
employees_record test_rec; --定义record类型的变量
begin
-- 对变量赋值
select last_name,email,salary,job_id
into employees_record.last_name,
employees_record.email,
employees_record.salary,
employees_record.job_id
from employees
where EMPLOYEE_ID=186;
dbms_output.put_line(employees_record.last_name
||','||employees_record.email
||','||employees_record.salary
||','||employees_record.job_id
);
end;

5. 使用 %rowtype ,打印员工号186的员工的全部信息

declare
v_employees employees%rowtype; --定义record类型的变量
begin
-- 对变量赋值
select *
into v_employees
from employees
where EMPLOYEE_ID=186;
dbms_output.put_line(v_employees.last_name
||','||v_employees.email
||','||v_employees.salary
||','||v_employees.job_id
);
end;

----------------------------------
6.1 使用赋值符号位变量进行赋值,通过变量实现查询186员工的全部信息

declare
type dep_table_type is table of employees%rowtype;
my_dep_table dep_table_type :=dep_table_type();
begin
my_dep_table.extend(5);

for i in 1..5 loop
select * into my_dep_table(i)
from employees
where EMPLOYEE_ID=186;
end loop;

dbms_output.put_line(my_dep_table.count());
dbms_output.put_line(my_dep_table(1).EMPLOYEE_ID
);
dbms_output.put_line(my_dep_table(1).FIRST_NAME
);
dbms_output.put_line(my_dep_table(1).LAST_NAME
);
dbms_output.put_line(my_dep_table(1).PHONE_NUMBER
);
dbms_output.put_line(my_dep_table(1).HIRE_DATE
);
dbms_output.put_line(my_dep_table(1).JOB_ID
);
dbms_output.put_line(my_dep_table(1).SALARY
);
dbms_output.put_line(my_dep_table(1).COMMISSION_PCT
);
dbms_output.put_line(my_dep_table(1).MANAGER_ID
);
dbms_output.put_line(my_dep_table(1).DEPARTMENT_ID
);
end;

-------------------
6.2 通过变量实现DELETE、INSERT、UPDATE等操作

declare
v_empno number(4) :=8889;
v_ename varchar2(20) := 'zhangsan';
begin
insert into emp(empno,ename,hiredate) values(v_empno,v_ename,to_date('2019-04-22','yyyy-mm-dd'));
--delete from emp where empno=v_empno;
--update emp set ename='张三' where empno=v_empno;
commit;
end;

补充:使用嵌套表类型,查询部门号在110-200之间的全部部门信息

declare
type dep_table_type is table of departments%rowtype;
my_dep_table dep_table_type :=dep_table_type();
begin
my_dep_table.extend(10);

for i in 1..10 loop
select * into my_dep_table(i)
from departments
where department_id=100+10*i;
end loop;

dbms_output.put_line(my_dep_table.count());
dbms_output.put_line(my_dep_table(1).department_id
);
dbms_output.put_line(my_dep_table(2).department_id
);
dbms_output.put_line(my_dep_table(3).department_id
);
dbms_output.put_line(my_dep_table(4).department_id
);
dbms_output.put_line(my_dep_table(5).department_id
);
dbms_output.put_line(my_dep_table(6).department_id
);
dbms_output.put_line(my_dep_table(7).department_id
);
dbms_output.put_line(my_dep_table(8).department_id
);
dbms_output.put_line(my_dep_table(9).department_id
);
dbms_output.put_line(my_dep_table(10).department_id
);

SQL练习题题目的更多相关文章

  1. 50道sql练习题和答案

    最近两年的工作没有写过多少SQL,感觉水平下降十分严重,网上找了50道练习题学习和复习 原文地址:50道SQL练习题及答案与详细分析 1.0数据表介绍 --1.学生表 Student(SId,Snam ...

  2. SQL练习题汇总(Sqlserver和Mysql版本)

    所需表及数据执行脚本: CREATE TABLE STUDENT (SNO ) NOT NULL, SNAME ) NOT NULL, SSEX ) NOT NULL, SBIRTHDAY DATET ...

  3. 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习

    什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...

  4. 50道SQL练习题及答案与详细分析!!!

    以前在学校还没有很认真地意识到,现在到了企业才发现sql是那么的重要,看到网上有很多的sql 练习题,特地拿来练练手! 数据表介绍 --1.学生表 Student(SId,Sname,Sage,Sse ...

  5. 50道SQL练习题及答案与详细分析(MySQL)

    50道SQL练习题及答案与详细分析(MySQL) 网上的经典50到SQL题,经过一阵子的半抄带做,基于个人理解使用MySQL重新完成一遍,感觉个人比较喜欢用join,联合查询较少 希望与大家一起学习研 ...

  6. SQL练习题完整(做完你就是高手)

    SQL 练习题答案 一.补充作业一.   设有三个关系:                S(SNO, SNAME, AGE, SEX,Sdept)                SC(SNO, CNO ...

  7. j接近50道经典SQL练习题,附建表SQL解题SQL

    说明 本文章整理了47道常见sql联系题,包括建表语句,表结构,习题列表,解题答案都涵盖在本文章内.文末提供了所用SQL脚本下载链接.所有解题答案都是本人自己写的,广大读者如果在阅读使用中,有任何问题 ...

  8. 几道经典的SQL笔试题目

      几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人      商品名称     数量 A            甲          2 B            乙        ...

  9. 很不错的sql练习题(select)

      创建表和输入数据 CREATE TABLE STUDENT (SNO VARCHAR(3) NOT NULL,    SNAME VARCHAR(4) NOT NULL,    SSEX VARC ...

随机推荐

  1. ReactiveSwift源码解析(四) Signal中的静态属性静态方法以及面向协议扩展

    上篇博客我们聊了Signal的几种状态.Signal与Observer的关联方式以及Signal是如何向关联的Observer发送事件的.本篇博客继续上篇博客的内容,来聊一下Signal类中静态的ne ...

  2. Excel日期中那个著名的bug

    一个软件中的bug能够持续多久?答案不一,大多数bug在软件测试阶段就已经被干掉,又有许多死在Preview阶段,抑或正式上线后不久被干掉,有些则伴随软件终生,直到下一代产品发布才寿终正寝,而Exce ...

  3. mysql之聚合函数、group by、having

    sql中提供聚合函数可以用来统计,求和,求最值等 那么聚合函数有哪些呢? COUNT    统计行数量 SUM         求某一列的和 AVG          求某一列的平均值 MAX  求某 ...

  4. 使用 Moq 测试.NET Core 应用 -- Mock 行为

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...

  5. Elasticsearch Index模块

    1.  Index Setting(索引设置) 每个索引都可以设置索引级别.可选值有: static  :只能在索引创建的时候,或者在一个关闭的索引上设置 dynamic:可以动态设置 1.1.  S ...

  6. 中国.NET:各地微软技术俱乐部汇总(更新中...)

    与微软技术的发展历程相似,微软俱乐部的发展同样经历着沉沉浮浮.2002年周庆麒先生创办的著名Office技术论坛Excel Home的上线,各种线上技术社区在中国的互联网世界中萌发.接着以鞠海洋(广州 ...

  7. Egg.js 中入参的校验

    日常作业中免不了频繁处理 GET/POST 的入参,你当然可以每个 action 中都重复地去做这些事情, 从 query 或 body 取出入参, 对可选的入参进行判空, 处理入参的类型转换, 对入 ...

  8. springboot~mybatis里localdatetime序列化问题

    问题起因 主要是使用mybatis作为ORM之后,返回的对象为Map,然后对于数据库的datetime,datestamp类型返回为时间戳而不是标准的时间,这个问题解决方案有两种,大叔分析一下: 在m ...

  9. SQL优化 MySQL版 - 避免索引失效原则(一)

    避免索引失效原则(一) 精力有限,剩余的失效原则将会在 <避免索引失效原则(二)>中连载出来,请谅解 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 避免索引失效的一些原 ...

  10. webpack-插件机制杂记

    系列文章 Webpack系列-第一篇基础杂记 webpack系列-插件机制杂记 前言 webpack本身并不难,他所完成的各种复杂炫酷的功能都依赖于他的插件机制.或许我们在日常的开发需求中并不需要自己 ...