plsql语言的学习

plsql语言

目的

是为了在复杂的业务逻辑可以写入数据库,能够减少数据库和服务器之间交互,提高执行效率

plsql语言中的测试窗口可以进行代码的编写

分为三个部分 声明 、可执行 、异常处理

DECLARE
--[声明]变量、游标
I integer;
BEGIN
--[执行]

--[异常处理]
END;

HelloWord 案例

-- Created on 2021/5/14 by ADMIN 
declare
--没有变量的定义可以省略
  -- 打印hellowoerd
begin
  --sout(“helloword”)
  DBMS_output.put_line('hello word');
end;

如果想要在黑窗口执行,需要先输入

set serveroutput on

接着在 上述helloword 代码后面添加一个

/

常见变量

1.普通数据类型

char,varchar2,date,number,bollean,long

2.特殊变量类型

引用型变量、记录型变量

变量声明方式

不建议直接使用name 需要区分同名关键字

变量名  类型  例如:v_name varchar2(20)
赋值语句
1.直接赋值 :=
2语句赋值 select ~ into ~
-- Created on 2021/5/14 by ADMIN 
declare
 --姓名
 v_name varchar2(16) :='张三';
 --薪水
 v_sal number;
 --地址
 v_addr varchar2(128);
 
begin
  --直接赋值
  v_sal :=1500;
  
  --语句赋值
  select '兆尹科技' into v_addr from dual;
  
  --打印赋值
  dbms_output.put_line('姓名:'|| v_name || ',薪水:' || v_sal|| '.地址:' || v_addr);
end; 

引用型变量
通过表名.列名%TYPE 指定类型 例如v_name emp.ename%TYPE
-- Created on 2021/5/14 by ADMIN 
declare
 --姓名,不需要指定类型,跟着表的字段类型设定
 v_name emp.name%type;
 --编号,不需要指定类型,跟着表的字段类型设定
 v_id emp.id%type;
 --地址
 v_addr varchar2(128);
 
begin
 select name,id into v_name,v_id from emp where id = 1;
  
  --打印赋值
  dbms_output.put_line('姓名:'|| v_name || ',编号:' || v_id );
end; 

记录型变量

接收对应表中的一 整行记录

-- Created on 2021/5/14 by ADMIN 
declare
--记录型变量,记录不超过8列
   v_emp emp%rowtype;
begin
 select * into v_emp from emp where id = 1;  
  --打印赋值
  dbms_output.put_line('姓名:'|| v_emp.name || ',编号:' || v_emp.id ||  ',薪水:' || v_emp.sal ||  ',部门:' || v_emp.dept );
end; 
结果:
//姓名:小虎,编号:1,薪水:8000,部门:信用卡

流程控制

if判断

谨记:有开始就有结束

--判断emp表中的记录是否超过3条
declare
  --声明变量接收emp表中的数量
  v_count number;
begin
  select count(1) into v_count from emp;
  if v_count > 3 then
    dbms_output.put_line('emp表中记录超过了3条:' || v_count);
   --这里是 elsif 
    elsif v_count > 1 then
       dbms_output.put_line('emp表中记录超过了1条 为:' ||  v_count ||'条');
  else
    dbms_output.put_line('emp表中记录没有记录');
  
  end if;
end;

循环
loop循环
BEGIN
	loop
		exit when
		end loop;
END;
--判断打印数字-1-10
declare
  --声明循环变量
  v_num number := -1;
begin
    
  loop
  
  exit when v_num > 10 ;
  
  --输出
  dbms_output.put_line(v_num);
  
  -- 自增
  v_num := v_num + 1;
    
  END LOOP;

end;

游标

字面意思 类似ResultSet中的的next指针

使用方法 声明-》打开-》读取-》关闭

声明:
cursor 游标名[(参数列表)] is 查询语句;
游标的打开:
open 游标名;
游标的取值
fetch 游标名 into 变量列表;
游标的关闭
close 游标名;
属性
属性返回值说明
%rowcount整 型获得FETCH语句返回的行数
%found布尔型fetch 有数据为真,没数据为假
%notfound布尔与fetch属性的返回值相反
%isopen布尔型游标已经打开时值为真,否则为假
创建和使用
--游标遍历emp表中的工资和姓名并打印出来
declare
  --声明无参数游标
  cursor c_emp is select name,sal from emp;
  
  --声明变量接收游标遍历出来的值
  v_name emp.name%type;
  v_sal emp.sal%type;
begin
  
  --打开游标
  open c_emp;
  
  --遍历游标
  loop
    
  --获取游标中的数据
  fetch c_emp 
  	into v_name,v_sal;
  
  --退出条件C_emp 中不再有数据
  exit when
  	c_emp%notfound;  
  dbms_output.put_line(v_name|| '---'|| v_sal);
  --退出循环
  end loop;
  --关闭游标
  close c_emp;

end;

带参游标
--依据编号遍历emp表,编号手动输入
declare
  --声明游标
  cursor c_emp(v_id emp.id%type) is select name,sal from emp where id = v_id;
  
  --声明变量接收游标遍历出来的值
  v_name emp.name%type;
  v_sal emp.sal%type;
begin
  
  --打开游标
  open c_emp(1);
  
  --遍历游标
  loop
    
  --获取游标中的数据
  fetch c_emp into v_name,v_sal;
  
  --退出条件C_emp 中不再有数据
  exit when c_emp%notfound;
    
  dbms_output.put_line(v_name|| '---'|| v_sal);
  
  end loop;
  --关闭游标
  close c_emp;

end;

存储概念

目的是为了减少数据库的开闭,减少资源的消耗,同时将操作语句写在plsql中不容易出错,而且有日志恢复等功能

语法
create or replace procedure 过程名称[(参数列表)] is
BEGIN

END [过程名称];

依据参数的类型分为三类

(1)不带参数

文件-新建-程序窗口-procedure

create or replace procedure p_hello as
 --声明变量      
begin
  
  dbms_output.put_line('hello world');
  
end p_hello;
--在调试窗口中调用
BEGIN
  --plsql调用存储过程;
  p_hello;
END;
--输出
//hellow world

在黑窗口中使用也可以打印

exec p_hello
(2)带输入参数
--根据编号查询员工信息
create or replace procedure p_query(i_id in emp.id%type) as
 --声明变量
      v_name emp.name%type;
      v_sal emp.sal%type;
      v_dept emp.dept%type;
begin
      --查询emp表中的员工信息
  select name,sal,dept into v_name,v_sal,v_dept from emp where id=i_id;
  dbms_output.put_line('姓名:'||v_name || ',薪水' ||v_sal||',部门'||v_dept);  
end p_query;

调用同理

(3)带输入参数和返回值的
--根据编号查询员工信息,将薪水作为返回值
create or replace procedure p_query_out(i_id in emp.id%type,o_sal out emp.sal%type) as

begin
   
  select sal into o_sal from emp where id = i_id;

end p_query_out;

调用

--声明变量接收 o_sal
declare
 v_sal emp.sal%type;
         
BEGIN
 
 --调用方法斌传值
 p_query_out(1,v_sal);
 
 dbms_output.put_line(v_sal);
 
END;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值