Oracle数据库之变量

--一、变量
--1、语法
variable_name [CONSTANT] type [not null] [:=value];
--2、注释
constant :表明为一个常量,在定义时需要指定初始值,一旦定义其值,则不能改变;
type:变量类型;
not null:变量值不能为空;
:=value:用于为变量赋予初始值;
--3、示例
declare
 v_deptName varchar2(32);
 v_depNo not null;
 v_depDate not null default sysdate;
 v_depEmpDate not null :=sysdate;
--default与:=是可以互换使用的,都用来为变量赋初始值;一旦出现not null,后面必须具赋初始值的语句。
--二、变量的赋值  
--1、未给变量赋值,产生的结果,案例:
declare
 v_counter integer;
 begin
   v_counter:v_counter+1;
   dbms_output.put_line('未给变量赋初始值为:'||v_counter);
 end;
--当给变量赋初始值时,结果如下:
declare
  v_counter integer;
  begin
    v_counter:=1;
    v_counter:=v_counter+1;
    dbms_output.put_line('给变量赋初始值为'||v_counter);
  end;
--在没给变量赋值之前,不要直接使用变量进行运算操作。
--2、根据表达式的不同,可以为变量直接赋值,也可使用表达式计算变量的值;
declare
  salary number(7,2);
  rate number(7,2):=0.12;
  v_base_salary number(7,2):=10000;
  begin
    salary:=v_base_salary*(1+rate);
    dbms_output.put_line('今年奖金为:'||salary);
  end;

--三、常用变量的赋值方法
declare
  v_bool boolean;  --这里输出老报错;
  v_varchar varchar2(32);
  v_integer integer;
  v_date date;
  v_emp date;
  begin
    v_bool:=true;
    v_varchar:='32';
    v_integer:=32;
    v_date:=sysdate;
    v_emp:=to_date(sysdate,'yyyy-mm-dd');
     dbms_output.put_line(v_varchar);
      dbms_output.put_line(v_integer);
       dbms_output.put_line(v_date);
        dbms_output.put_line(v_emp);
  end;

create table emp(
empno varchar(32),
ename varchar(32),
hirdate date
);
insert into emp values('1','JJ',sysdate);

--四、使用数据库来为变量赋值   这里执行不过关;
declare
 v_empno    emp.empno%type;
 v_empname  emp.ename%type;
 v_hirdate  emp.hirdate%type;
 begin
   select empno,ename,hirdate into v_empno,v_empname,v_hirdate from emp where empno=&empno;
   dbms_output.put_line('员工工号为'||v_empno);
   dbms_output.put_line('员工姓名为'||v_empname);
   dbms_output.put_line('员工进公司时间为'||v_hirdate);
  end;
-- %type
declare
 v_empno emp.empno%type;
 v_empname v_empno%type;
 v_salary number(7,3) not null:=1235.3;
  v_salary%type:=1234.555;
 begin
   null;
   end;
--如果 v_othersalary 未指定变量的初始值,会有如下异常:声明为not null 的变量必须有初始化赋值;
-- %rowtype  用于绑定一整行的表列的类型,可以使用%rowtype定义的变量看作是一条记录类型
declare
  v_emp emp%type;
  begin
    select *
    into v_emp
    from emp
    where empno=&empno;
    dbms_output.put_line('--'v_emp.empno);
   end;
--用%rowtype 定义的变量插入表
declare
 v_emp emp%rowtype;
 begin
   v_emp.empno:='33';
   v_emp.ename:='李四1';
   v_emp.hirdate:=to_date('20130419','yyyy-mm-dd');
   insert into emp values v_emp;
  end;
--使用%rowtype定义游标类型的变量
declare
 cursor emp_cursor   --定义游标
 is select empno,ename,hirdate from emp;
 v_emp emp_cursor%rowtype;   --定义游标类型
 begin
   open emp_cursor;          --打开游标
   loop
     fetch emp_cursow
     into v_emp;
     exit when emp_cursor%notfound;   ---当游标移动至最后的时候关闭;
     dbms_output.put_line(v_emp.empno||v_emp.ename||v_emp.hirdate);
   end loop;
   close emp_cursor;   --关闭游标;
  end;  
--五、变量的作用域和可见性
<<outer>>
declare
 v_empname varchar2(32);
 begin
    v_empname:='张三';
    <<inner>>
    declare
     v_empname varchar2(32);
  begin
     v_empname:='李四';
     dbms_output.put_line(v_empname);
     dbms_output.put_line(outer.v_empname);
  end;
    dbms_output.put_line(v_empname);
 end;
--六、常量的定义
constant_name constant datetype:=value;
declare
 c_salary_rate constant number(7,2):=0.25;
 v_salary number(7,2);
 begin
    select sal*(1+c_salary_rate) into v_salary from emp
    where empno=&empno;
    dbms_output.put_line(v_salary);
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值