学习大数据DAY12 PLSQL基础语法

目录

PLSQL简介 

PLSQL程序结构

输出打印变量

自动替换功能:

变量定义规范

变量&常量

变量&常量定义:

键盘输入给变量赋值

变量常量使用

作业

错点复习

变量赋值

SQL语句给变量赋值

DML语句赋值

增删改示例

引用型变量定义:

复合型变量定义

自定义型变量定义

作业2

错点复习2


PLSQL基础语法

PLSQL简介 

PL/SQL(Procedural Language/SQL)是一种过程化语言,属于第三代语言,它与C

C++Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。在甲骨文数据库管理方面,PL/SQL是对结构化查询语言(SQL)的过程语言扩展。PL/SQL的目的是联合数据库语言和过程语言。

PL/SQL的基本单位叫做块,由三个部分组成:一个声明部分,一个执行部分和异常处理部分。

PLSQL程序结构

PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用

declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。

示例:

declare --声明部分

begin --可执行部分

exception --异常处理部分

end; --结束

输出打印变量

-- 打印变量函数

DBMS_OUTPUT.put_line() --在控制台打印参数内容,并换行

DBMS_OUTPUT.put() --输出但不换行,后面如果没有line则不输出

自动替换功能:

工具-首选项-编辑器-自动替换

print=dbms_output.put();

printl=dbms_output.put_line();

可以加入其他自己方便的代码替换

自动替换定义示例:


变量定义规范

变量名由字母、数字和下划线组成,且必须以字母开头,长度不得超过30个字符,不区分大小写。

变量&常量

变量&常量定义:

变量名称 数据类型 := 值;

常量名称 constant 数据类型 := 值;

示例:

v_empno number:=4;

v_ename constant varchar2(20) := 'SCOTT';

键盘输入给变量赋值

通过&符号进行变量赋值操作

-- 接收的数据是数字,直接写:=&参数名

-- 接收的数据是字符串类型:='&参数名'

declare

-- 声名一个变量保存一个员工姓名

v_ename varchar2(20);

eno number(4):=&请输入员工编号;

begin

-- 查询7369的姓名

select ename into v_ename from emp where empno=eno;

-- 打印员工姓名

dbms_output.put_line(v_ename);

end;

变量常量使用

declare

x number(4):=2;

y number(4);

z constant number(4):=8;

begin

y:=4;

x:=5;

dbms_output.put(x);

dbms_output.put(y);

dbms_output.put_line(null);

dbms_output.put_line(x);

dbms_output.put_line(y);

dbms_output.put_line(z);

end; 

作业

--1. 声明三个变量分别存储你的姓名,今天的时间,你的身份证号码前6位,并打印输出
declare

Myname varchar2(5):='石XX';

today date:=sysdate;

IdCard number(6):=452402;

begin

  dbms_output.put_line(Myname);

  dbms_output.put_line(to_char(today,'yyyymmdd'));  

  dbms_output.put_line(IdCard); 

end;

/*2. 输入两个数字输出数字的和是多少,差是多少,积是多少

注:运算要用小括号括起先执行*/

declare

 Number1 number(3):=&Number1 ;

  Number2 number(3):=&Number2 ;

begin

 dbms_output.put_line((Number1+Number2)); 

 dbms_output.put_line((Number1-Number2));

 dbms_output.put_line((Number1*Number2));

  end;

--3. 计算圆的面积和周长,声明常量π声明变量半径r,执行过程中给r重新赋值再重新计算

declare

Π number(6,2):=3.14;

r number(3,2):=&输入半径:;

begin

  dbms_output.put_line('圆的面积为:'||Π*r*r); 

  dbms_output.put_line('圆的周长为:'||2*Π*r); 

  end;

/*4. 在代码块中将部门编号:50,部门名称:Administration,部门地址:guilin,的信

息插入到scott.dept表中。*/

declare

begin

  insert into dept(deptno,dname,loc) values(50,'Administration','guilin');

  end;

错点复习

数据类型 number(m,n)--共m位,小数占n位,n不写则取整。

变量赋值

SQL语句给变量赋值

DQL语句赋值

select 列,...列 into 变量,...变量 from 表;

示例:

-- 给变量赋值

select ename into v_ename from emp where empno=7654;

-- 给复合型变量赋值

select * into v_emp from emp where empno=7788;

DML语句赋值

insert into 表名 values(值1,值2...) returning 表名.值1 into 变量名;

update 表名 set 列名1='值1' returning 表名.值1 into 变量名;

delete from 表名 where 判断条件 returning 表名.值1 into 变量名;

示例:

-- 插入语句赋值

insert into emp(empno,ename,job,deptno) values(9999,'TOM','MANAGER'10)

returning emp.empno,emp.ename,emp.job into v_empno,v_ename,v_job;

-- 更新语句赋值

update emp set deptno=30 where empno ='9999' returning emp.deptno into v_deptno;

-- 删除语句赋值

delete from dept where deptno=10 returning deptno,dname,loc into v_dept;

returning 进行赋值 ,insert update 语句获取的是插入和更新后的值, delete获取的是

删除前的值。

增删改示例

declare

dname varchar2(20);

begin

insert into dept values(70,'test','test')

returning dept.dname into dname;

dbms_output.put_line(dname);

update dept set dname='hh' where deptno=50

returning dname into dname;

dbms_output.put_line(dname);

delete from dept where deptno=40

returning dname into dname;

dbms_output.put_line(dname);

end;

引用型变量定义:

变量名称 表名.列名%type;

示例:

v_job emp.job%type;

复合型变量定义

变量名称 表名%rowtype;

示例:

v_emp emp%rowtype;

declare

x number(4):=2;

y number(4);

z constant number(4):=8;

v_ename emp.ename%type:='test';

v_emp emp%rowtype;

begin

y:=4;

x:=5;

dbms_output.put(x);

dbms_output.put(y);

dbms_output.put_line(null);

dbms_output.put_line(x);

dbms_output.put_line(y);

dbms_output.put_line(z);

dbms_output.put_line(v_ename);

select ename into v_ename from emp where empno=7788;

dbms_output.put_line(v_ename);

select * into v_emp from emp where empno=7788;

dbms_output.put_line(v_emp.empno||v_emp.ename);

select empno,ename into v_emp.empno,v_emp.ename from emp where empno=7369;

dbms_output.put_line(v_emp.empno||v_emp.ename);

end; 

自定义型变量定义

type 记录名 is record(变量 数据类型,变量 数据类型......);

变量名 记录名;

declare

type ha_type is record(

x number(4),

v_ename emp.ename%type,

v_emp emp%rowtype

);

v_ha ha_type;

begin

v_ha.x:=5;

select ename into v_ha.v_ename from emp where empno=7788;

select * into v_ha.v_emp from emp where empno=7788;

dbms_output.put_line(v_ha.x);

dbms_output.put_line(v_ha.v_ename);

dbms_output.put_line(v_ha.v_emp.ename);

end;

作业2

PS:第五题自学了一下后面的知识(循环,游标)。

--1.输入员工编号打印员工的姓名,部门编号和工资

declare 

    v_empno emp.empno%type:=&输入员工编号;

    type names is record(

    ename emp.ename%type,

    deptno emp.deptno%type,

    sal emp.sal%type

    );

    edsemp names;

begin

    select ename,deptno,sal into edsemp.ename,edsemp.deptno,edsemp.sal from emp

    where empno=v_empno;

    dbms_output.put_line(edsemp.ename||' '||edsemp.deptno||' '||edsemp.sal); 

  end;

--2.打印7839这个员工的名称,部门名称,工作地

declare

  type names is record(

  ename emp.ename%type,

  dname dept.dname%type,

  loc dept.loc%type

  );

  edlmp names;

begin

  select ename,dname,loc into edlmp.ename,edlmp.dname,edlmp.loc

  from emp left join dept on emp.deptno=dept.deptno

  where empno=7839;

  dbms_output.put_line(edlmp.ename||' '||edlmp.dname||' '||edlmp.loc); 

  end;

--3.添加一条数据到dept,打印部门编号

declare

  NewDeptno dept.deptno%type;

begin

  insert into dept(deptno,dname,loc) values(50,'Administration','guilin');

  select deptno into NewDeptno from dept where deptno=50;

  dbms_output.put_line(NewDeptno); 

  end;

--4.修改emp表empno=7839工资为8000,打印姓名和工资

declare

  type names is record(

  ename emp.ename%type,

  sal emp.sal%type

  );

  esmp names;

begin

  update emp set sal=8000 where empno=7839;

  select ename,sal into esmp from emp where empno=7839;

  dbms_output.put_line(esmp.ename||' '||esmp.sal); 

  end;

--5.删除部门40的部门信息,打印部门名称和地址

declare

cursor cur_dept is select dname,loc from dept;

v_dept cur_dept%rowtype;

row0 number(10);

begin

  delete from dept where deptno=40;

  select max(rownum) into row0 from dept;

  open cur_dept;

  for i in 1..row0

    loop

  fetch cur_dept into v_dept;

  dbms_output.put_line(v_dept.dname||' '||v_dept.loc);

  end loop;

  close cur_dept;

  end;



--6.使用输入学生的学号,打印姓名,总分,平均分

declare

type names is record(

sname student.sname%type,

sumscore sc.score%type,

avgscore sc.score%type);

scname names;

ssno student.sno%type:='&输入学号:';

begin

  select sname,sum(score),avg(score) into scname

  from student left join sc on student.sno=sc.sno

  where student.sno=ssno group by sname;

  dbms_output.put_line(scname.sname||' '||scname.sumscore||' '||scname.avgscore); 

  end;

--7.输入一个日期打印星期几,明天的日期,以及一年零三个月后的日期

declare

daytime date:=to_date('&输入日期','yyyymmdd');

daytime_tomorrow date:=daytime+1;

daytime_future date:=add_months(daytime,15);

daytime_day varchar2(10):=to_char(daytime,'day');

begin

  dbms_output.put_line(daytime_day); 

  dbms_output.put_line(to_char(daytime_tomorrow,'yyyymmdd')); 

  dbms_output.put_line(to_char(daytime_future,'yyyymmdd')); 

  end;

错点复习2

Lead()函数:

Select lead(X,N,M)over(......) from B;

以B表X列为目标向下取数,每次取N位,取不到为M。

增删改常用句式:

增:alter table X add......

Insert into X values(......)/(子查询)

删: drop table X

Alter table X drop column Y

Delete from X where......

Alter table X delete column Y

改:

Update X set ... where...

Alter table X modify ...

相关推荐

  1. 学习数据DAY15 PLSQL基础语法4

    2024-07-10 20:24:02       13 阅读
  2. 嵌入式学习——C语言基础——day12

    2024-07-10 20:24:02       32 阅读
  3. 嵌入式学习——C语言基础——day10

    2024-07-10 20:24:02       31 阅读
  4. 嵌入式学习——C语言基础——day13

    2024-07-10 20:24:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 20:24:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 20:24:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 20:24:02       45 阅读
  4. Python语言-面向对象

    2024-07-10 20:24:02       55 阅读

热门阅读

  1. 架构面试-数据库优化问题

    2024-07-10 20:24:02       19 阅读
  2. 精通Sklearn时间序列分析:预测未来的艺术

    2024-07-10 20:24:02       24 阅读
  3. OpenHarmony移植小型系统exynos4412(一)

    2024-07-10 20:24:02       19 阅读
  4. 适合selenium的防自动化检测的方法

    2024-07-10 20:24:02       21 阅读
  5. 使用Spring Boot和HBase实现大数据存储

    2024-07-10 20:24:02       19 阅读
  6. 华为机考真题 -- 篮球游戏

    2024-07-10 20:24:02       21 阅读
  7. Docker 入门篇(十 一)-- 网络配置总结

    2024-07-10 20:24:02       24 阅读