1.PLSQL语法结构、声明

sql基础专栏做完了,仅仅是入门能到面试的程度,还是要不断学习的,加油!现在我会持续更新PLSQL部分。


1.概念:

PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)

PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,

所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算

2.语法:

declare--声明部分,做事情的准备工作,定义变量

begin--执行部分,需要做的事情,代码的编写

exception--异常部门,处理一些意外状况,处理异常

end;

3.变量和常量的声明

1.变量的声明

1.1变量的先声明后赋值

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

1.2变量的声明并赋值

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

2.常量的声明

常量名称 constant (康斯忒的)数据类型 := 值;

注意:

1.常量声明要加 constant 关键字,声明时必须进行初始化赋值,并且不能修改常量的值

2.变量的值可以修改,但是以最后一次赋值为准

3.窗口内程序运行后会在后台打印输出结果

4.声明数据类型时,varchar2 必须加精度,number可以不加精度

5.变量一般用 "v_" 开头进行命名,常量一般用 "c_" 开头来命名,在公司按照公司要求来命名

4.数据类型的引用

4.1直接定义

变量名称 数据类型;

4.2引用某一个变量或者字段的数据类型 %type

变量名称%type/表名.列名%type 例:v_job emptest.job%type;

4.3引用某一张表所有字段的额数据类型 %rowtype

表名%rowtype(肉太噗)例:v_emp emptest%rowtype;

4.4复合类型type 表名 is record

例:type t1 is record (v_name varchar2(20),v_sal number,v_dno emptest.deptno%type ); v_emp t1;

5.获取键盘输入的信息

获取键盘输入的数字,字符串

例:v_num number := &请输入一个数字;(输入的是字符要带单引号)

v_str varchar2(20):='&请输入你的名字';

6.动态sql

1.动态sql是指在运行时候才构建的sql语句,静态sql指的是在代码编译时刻就已经包含在代码中的那些已经充分明确的固定的sql语句

2. 动态sql最大的优点就是可以灵活的用变量带入sql,还可以返回查询的值

3.在DML和事务控制的语句可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使用动态SQL来实现

1.语法:

declare 定义变量1;--存放sql语句

begin

execute immediate 变量1 into 变量;

end;

7.练习

7.1查询键盘输入编号对应员工的岗位和领导姓名并打印输出

方法1:静态查询

declare
  v_empno emp.empno%type := &请输入一编号;
  v_job   emp.job%type;
  v_ename emp.ename%type;
begin
  select job into v_job from emp where empno = v_empno;
  select ename
    into v_ename
    from emp
   where empno = (select mgr from emp where empno = v_empno);--分开查询
  dbms_output.put_line(v_job || ' ' || v_ename);
end;

方法2:动态查询

declare
  v_empno emp.empno%type := &请输入员工编号;--获取键盘输入的信息
  v_sql   varchar2(200);--直接定义不同的变量
  v_job   emp.job%type;--引用某一个变量或者字段的数据类型  
  v_ename emp.ename%type;
begin
  v_sql := 'select t2.job,t1.ename from emp t1
     inner join emp t2
     on t1.mgr=t2.empno
     where t1.empno= ' || v_em
     pno;--from,where后面不能是变量
  execute immediate v_sql
    into v_job, v_ename;
  dbms_output.put_line(v_job || '--' || v_ename);--不能用逗号隔开
end;

7.2键盘输入一个表名,打印输出这个表中数据的条数

declare
      v_emp   varchar2(200) := '&请输入表名';
      v_sql   varchar2(200);
      v_count number;
    begin
      v_sql := 'select count(1) from '||v_emp;--from后面要有空格与管道符隔开
      dbms_output.put_line(v_sql);
      execute immediate v_sql
        into v_count;
      dbms_output.put_line(v_count);
    end;--只能用动态查询,from后面加变量它只会认为是表名,所以用拼接符
    

7.3.删除 emptest 表中的第一行数据, 并且打印输出删除员工的 名字和入职日期

declare
  v_ename    emp.ename%type;
  v_hiredate emp.hiredate%type;
begin
  delete from emp
   where rownum = 1
  returning ename, hiredate into v_ename, v_hiredate;--一条代码直接输出
  dbms_output.put_line(v_ename || v_hiredate);
end;

7.4.键盘输入一个员工编号, 修改该员工的薪水为 3000,并输出前后薪水

declare
  v_empno   emp.empno%type := '&请输入员工编号';
  v_new_sal number;
  v_old_sal number;
begin
  select sal into v_old_sal from emp where empno = v_empno;
  update emp
     set sal = 3000
   where empno = v_empno
  returning sal into v_new_sal;
  dbms_output.put_line(v_old_sal || ' ' || v_new_sal);
end;

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值