PL/SQL - 04

变量和变量类型 


变量是一块用来存储数据的内存区域,定义在PL/SQL块的declare区域 在定义变量时通常需要为变量指定一个数据类型,也可以在定义变量时为变量指定一个初始值。

变量的类型可以使任何SQL数据类型或者特定的PL/SQL类型 主要有4种类型的变量


1、标量变量 指代存放单个数值的变量,这是PL/SQL最常用的变量。标量变量的数据类型包含数字,字符,日期和布尔类型。

2、符合变量 指代用于存放多个值的变量,必须要使用PL/SQL复合数据类型来定义变量。

3、参照变量 指代用于存放数值指针的变量。

4、LOB变量 指代用于存储大批量数据的变量。


declare

v_deptname varchar2(10) ; -- 定义标量变量

v_loopcounter binary_integer --使用PL/SQL类型定义标量变量

-- 定义记录类型

type t_employee is record ( empname varchar2 (20) , empno number (7) , job varchar2 (20) );

v_employee t_employee ;-- 定义记录类型的变量

type csor is ref cursor ;  -- 定义游标变量

v_date date not null default sysdate ; -- 定义变量并制定默认值


begin

null 

end ;



程序控制语句 


条件控制语句  if  ... then ... else  |  if  ... then ... elsif ....then ....else ... ;


create or replace function getaddsalaryratiocase ( p_job varchar2 ) return number 

as v_result number (7,2) ;

begin

case p_job 

when ‘CLERK‘ then v_result := 0.10 ;

when ‘SALESMAN‘ then v_result := 0.15 ;

when ‘MANAGER‘ then v_result := 0.20 ;

end case ;

return v_result;

exception when others 

then dbms_output.put_line(‘产生异常:‘);

end ;


select getaddsalaryratiocase(‘CLERK‘) from dual;


declare 

result number(7,2) ;

v_job varchar2 (9) ;

v_empno varchar2(20);

v_ename varchar2(60);

cursor c_emp is select job , empno,ename from scott.emp for update ;

begin

open c_emp;

loop

fetch c_emp into v_job,v_empno,v_ename ;

exit when c_emp%notfound;

result := getaddsalaryratiocase(v_job) ;

update scott.emp set sal = sal * ( 1 + result ) where current of c_emp;

DBMS_OUTPUT.put_line(‘已经为员工  ‘|| v_empno||‘:‘||v_ename||‘  成功加薪!‘);

end loop;

close c_emp;

exception when others then DBMS_OUTPUT.put_line(‘没有找到员工信息!‘);

end;


循环控制语句 

PL/SQL提供三种循环 

1、简单循环 loop  ... end loop ;

2、for 循环 for ... exit when (退出条件) ;

3、while 循环 仅当条件成立时才执行循环


declare 

v_number1 number (3) ;

v_number2 number (3) ;

begin 

for v_number1 in 1 .. 9 

loop

    for v_number2 in 1 .. v_number1

    loop 

dbms_output.put(v_number1 || ‘*‘||v_number2||‘=‘||v_number1 * v_number2 || ‘   ‘);

    end loop ;

 dbms_output.put_line(‘ ‘);

 end loop ;

end;


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。