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

%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;

 

posted @ 2016-02-02 16:30  夏末、初秋  阅读(572)  评论(0编辑  收藏  举报