PLSQL基础 匿名块,变量,类型和条件分支

PLSQL 匿名块 变量 基本类型 封装类型

封装类型:列类型 行类型 记录类型 表类型

匿名块

语法结构

declare
 	-- 存放变量
begin
	-- 业务执行
exception
	-- 抛出异常后处理
end;
示例

让用户输入员工编号 , 在控制台打印员工姓名

declare
	v_id emp.empno%type := '&请输入员工id';
	v_name emp.ename%type;
begin
	select ename into v_name from emp where empno = v_id;
	dbms_output.put_line('员工名称:'|| v_name);
exception
	when no_data_found then
	dbms_output.put_line('没有ID为'|| v_id ||'的员工');
end;

业务部分是必须存在的,其他部分可以省略,例如下面的语句


-- declare 可以省略
begin -- 必须存在
  dbms_output.put_line('tetsabc');
-- exception 可以省略
end;

变量常量的声明和赋值

常量

声明常量需要加上 constant 关键字

declare
	v_pi constant number(5,2) := 3.14;
begin
	dbms_output.put_line('常量PI的值为:' || v_pi);
end;
变量
declare
	v_r number(5) := '&请输入半径'; -- 声明Number类型的变量,并让他接收传传过来的值
	v_pi constant number(5,2) := 3.14;
begin
	dbms_output.put_line('常量PI的值为:' || v_pi);
	dbms_output.put_line('变量r的值为:' || v_r);
	dbms_output.put_line('圆的面积为:'|| v_r * v_r * v_pi);
end;
请输入半径: 3
控制台输出↓↓↓
常量PI的值为:3.14
变量r的值为:3
圆的面积为:28.26

变量类型

基本类型

number 数字类型如果长度为(3,2),则为float类型
varchar 字符串类型
varchar2 字符串类型
date 日期类型
timestamp 时间戳类型

封装类型
  • %type 列类型

    v_id emp.empno%type := 7499; -- emp.empno%type 则是给v_id的类型设置为和emp表中empno的类型一致
    
  • %rowtype 行类型

    declare
    v_row emp%rowtype;
    begin
    	 select * into v_row from emp where empno = 7499;
    	dbms_output.put_line('EMPNO:'|| v_row.empno || '  EMPNAME:'|| v_row.ename);
    end;
    
  • record 记录类型

    记录类型可以理解为自定义类型

      declare
      -- 声明record类型
      type emp_record is record(
      	ename emp.ename%type,
      	sal emp.sal%type,
      	dname dept.dname%type
      );
      v_test emp_record;
      v_id emp.empno%type := '&输入id';
      begin
      select e.ename,e.sal,d.dname into v_test from emp e inner join dept d on e.deptno=d.deptno where e.empno = v_id;
      dbms_output.put_line('员工姓名:'|| v_test.ename||'基本工资:'|| v_test.sal || '部门名称:' || v_test.dname);
      end;
    
  • table 类型

    我们在上面的一些类型,都只能操作单行的数据,但是如果我们要存储多行数据放到一个变量中,就需要用到table类型的变量了

    在sql语句中使用into赋值时,前面需要加入 bulk collect关键字

    declare
     --声明一个table类型,并指定表类型中下标的增长方式使用整数
     type emp_table is table of emp%rowtype index by binary_integer;
     -- 声明一个table类型的变量
     v_table emp_table;
    begin
    select * bulk collect into v_table from emp;
    dbms_output.put_line(v_table(1).ename);  -- 单行输出,如果使用多行的话,就需要用到了循环
    end;
    

PLSQL 条件分支 循环

条件分支

在java中的条件分支有 if-else,switch(expr1) case 而在plsql中也存在条件分支

IF-ELSE

在写else if时,要写成elsif (并不是elseif)

语法结构

if 条件表达式 then
	语句块;
elsif 条件表达式 then
	语句块;
else
	语句块;
end if;

示例

declare
	v_name varchar2(20) := '&输入姓名'; 
begin
	if v_name = 'Fanxing' then
		dbms_output.put_line('输入了 Fanxing');
	elsif v_name = 'FX' then
		dbms_output.put_line('输入了FX');
	else
		dbms_output.put_line('输入了'||v_name);
	end if;
end;

CASE-WHEN

if else 和case when(相当于java中的switch case)

语法结构

case 变量

when 值 then
	代码块;
when 值2 then
	代码块;
else  值3 then
	代码块;
end case; 

示例


declare
	v_s number(4) := '&输入s';
begin
	case v_s
	when 0 then
		dbms_output.put_line('0');
	when 1 then
		dbms_output.put_line('1');
	else
		dbms_output.put_line(v_s);
  end case;
end;

循环

LOOP循环

结构

	loop
		代码块;
		if xxx then
			exit; -- 满足条件跳出循环
		end if;
	end loop;

示例

declare
  v_in number(5) :=1;
begin
  
    loop
      dbms_output.put_line(v_in);
      if v_in = 100 then
         exit;
      end if;
      v_in := v_in + 1;
    end loop;
end;

IF循环

结构

for 变量 in [reverse] 范围[1..10]
	loop
		代码块;
	end loop;

示例

declare
begin
  -- 输出 1 到 100
  for v_ins in 1..100
    loop
      dbms_output.put_line(v_ins);
      end loop;
      
  -- 输出 100 到 1
  for v_ins in reverse 1..100
    loop
      dbms_output.put_line(v_ins);
      end loop;
end;
WHILE循环

结构

while 条件
	loop
		代码块;
	end loop;

示例

declare
  v_in number(5) :=1;
begin
  while v_in < 100
    loop
      dbms_output.put_line(v_in);
      v_in := v_in +1;
      end loop;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值