定义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;