--一、变量
--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;
--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;