plsql开发之变量

3.1.1 变量的声明
-- 单行注释
/* 多
   行
   注释
*/
DECLARE
  v_empname  VARCHAR2 (20);
  v_deptname VARCHAR2 (20);
  v_hiredate DATE  NOT NULL := SYSDATE;
  v_empno    INT   NOT NULL :=7349; -- 一旦出现NOT NULL后必须跟赋值语句
BEGIN
  NULL;
END;
/

3.1.2 变量的赋值
set serverout on
DECLARE
  v_counter INTEGER;
BEGIN
  v_counter := v_counter + 1;
  dbms_output.put_line('未赋值的变量示例结果:'||v_counter); -- v_conter 为NULL
END;
/

DECLARE
  v_string VARCHAR2 (200);
  v_hire_date DATE;
  v_bool BOOLEAN;
BEGIN
  v_bool := True;
  v_hire_date := to_date('2011-12-13','yyyy-mm-dd');
  v_hire_date := sysdate;
  v_hire_date := date'2011-12-14';
  v_string :='This is a string';
END;
/

declare 
  v_empno  emp.empno%TYPE;
  v_ename  emp.ename%TYPE;
  v_hiredate emp.hiredate%TYPE;
BEGIN
  select empno,ename,hiredate into v_empno,v_ename,v_hiredate from emp where empno =&empno;
  dbms_output.put_line('员工编号:'||v_empno);
  dbms_output.put_line('员工名称:'||v_ename);
  dbms_output.put_line('聘用日期:'||v_hiredate);
END;
--如果select into 查询返回多行数据会触发TOO_MANY_ROWS异常
--如果未找到任何行数据就会触发NO_DATA_FOUND异常
/

3.1.3 使用%TYPE
DECLARE 
  v_empno emp.empno%TYPE;--v_empno具有empno列的类型但不具有empno列的约束信息
  v_empno2 v_empno%TYEP;
  v_salary number(7,3) not null :=1350.5;
  v_othersalary v_salary%TYPE :=1500; --v_othersalary 具有v_salary的类型和约束信息
BEGIN
  NULL;
END;
/

3.1.4 使用%ROWTYPE
DECLARE 
  v_emp emp%ROWTYPE;
BEGIN
  select * into v_emp from emp where empno =&empno;
  dbms_output.put(v_emp.empno||CHR(10)|| v_emp.ename);
END;
/
--chr(10)表示换行 chr(13)表示回车

DECLARE
  CURSOR emp_cursor
  is 
  select empno,empname,job,sal,hiredate from emp;
  v_emp emp_cursor%ROWTYPE;
BEGIN
  open emp_cursor; --open 打开游标 游标指向第一行
  LOOP
    FETCH emp_cursor into v_emp; --fetch 检索当前行的信息 并把游标指向下一行
    EXIT WHEN emp_cursor%NOTFOUND;
  dbms_output.put_line(v_emp.empno
                      ||' '
                      ||v_emp.ename
                      ||' '
                      ||v_emp.job
                      ||' ' 
                      ||v_emp.sal
                      ||' '
                      ||to_char(v_emp.hiredate,'yyyy-mm-dd')
                      );
   END LOOP;
   Close emp_cursor; --close 游标移动到最后一行后关闭游标;
END;
  
3.1.5 变量的作用域和可见性
<<outer>>
DECLARE
  v_empname VARCHar(20);
BEGIN
  v_empname :='张三';
  <<inner>>
  DEclare
    v_empname varchar(20);
  Begin
    v_empname := '李四';
    dbms_output.put_line('内层块的员工名称:' || v_empname);
    dbms_output.put_line('外层块的员工名称:' || outer.v_empname);--内层访问外层变量
  end;
  dbms_output.put_line('外层块的员工名称:' || v_empname);
END;
/

3.1.6  常量的定义
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;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值