码迷,mamicode.com
首页 > 其他好文 > 详细

定义declare、%TYPE%、ROWTYPE、加循环

时间:2016-02-02 17:40:57      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

%TYPE:
定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。

%ROWTYPE

PL/SQL 提供%ROWTYPE作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。

使用%ROWTYPE 特性的优点在于:
1.所引用的数据库中列的个数和数据类型可以不必知道。
2.所引用的数据库中列的个数和数据类型可以实时改变。

赋值语句

select ... into ....

declare 
  v_name teacher.tname%type;
  v_sal teacher.sal%type;
  
begin
  select t.tname,t.sal into v_name,v_sal from teacher t  where t.tno=1004;//赋值语句
  dbms_output.put_line(v_name||的工资为:||v_sal);
end;

条件控制

技术分享

注意:这里加了一个then、还有就是elsif  这里没有e

更改关键词大写--首选项

技术分享

-- Created on 2016/2/2 by ADMINISTRATOR 
declare 
  -- Local variables here   定义变量
  v_sal teacher.sal%type;
  v_name teacher.tname%type;
  v_rank varchar2(10);--存储是啥
begin
  -- Test statements here
  --先赋值
  select t.tname,t.sal into v_name,v_sal from teacher t where t.tno=1004;
  if v_sal<2000 then
    v_rank := 临时工;
  elsif v_sal >=2000 and v_sal <15000 then
    v_rank := 蓝领;
  elsif v_sal>=15000 and v_sal <40000 then
    v_rank := 白领;
  else 
     v_rank := 金领;
  end if;
  dbms_output.put_line(v_name||||v_rank||,工资:||v_rank);
end;

case

还得再定义一个变量

 case v_result
    when 金领 then
      dbms_output.put_line(v_name||工资范围:40000以上);
    when 白领 then
      dbms_output.put_line(v_name||工资范围:15000到40000);
    when 蓝领 then
      dbms_output.put_line(v_name||工资范围:2000到15000);
     else
        dbms_output.put_line(v_name||工资范围:2000以下);
    end case;

或者这样写

declare 

  v_name  teacher.tname%type;
  v_sal teacher.sal%type;
  v_result varchar2(20);
  v_sal_rank VARCHAR(20);
  
begin
  select t.tname,t.sal into v_name,v_sal  from teacher t where t.tno=1004;

  CASE v_result
    WHEN 临时工  THEN
      v_sal_rank := <2000;
    WHEN 蓝领 THEN
      v_sal_rank := [2000,15000);
    WHEN 白领 THEN
      v_sal_rank := [15000,4000);
    ELSE
      v_sal_rank := >40000;
    
  END CASE;
 dbms_output.put_line(v_name||||v_result||,工资:||v_sal_rank);
end;
循环语句

技术分享

新建序列的话就在

技术分享新建增加就好

create table dept_loop as select * from dept;--复制表

delete from dept_loop;--删除数据

--循环
declare
    v_start number;
    v_temp number:=0;
begin
    select max(deptno) into v_start from dept_loop;
    if  v_start is null then
        v_start:=‘’;
    end if;
    loop  
      v_start:=v_start+1;
        insert into dept_loop values(v_start,部门||v_start,地址||v_start);
        v_temp:=v_temp+1;
    exit when v_temp>=10;
    end loop;
    commit;
    

  select max(deptno) into v_start from dept_loop;
      v_temp:=0;
    while  v_temp<=10 loop  
      v_start:=v_start+1;
        insert into dept_loop values(v_start,部门||v_start,地址||v_start);
        v_temp:=v_temp+1;
    end loop;
    commit;
    
    
   select max(deptno) into v_start from dept_loop;
    for v_temp in v_start+1..v_start+10  loop
    insert into dept_loop values(v_start,部门||v_start,地址||v_start);
    end loop;
 commit;

end;

for的解释

  v_start+1..v_start+10的意思是,加1、+2、+3、、、到加10

  而v_temp就是代表上面的东西

上面这样要一直select

 select max(deptno) into v_start from dept_loop;
    for v_temp in v_start+1..v_start+10  loop
    insert into dept_loop values(v_temp,部门||v_temp,地址||v_temp);
    end loop;
 commit;

 

定义declare、%TYPE%、ROWTYPE、加循环

标签:

原文地址:http://www.cnblogs.com/xuerong/p/5177898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!