转载:  http://blog.163.com/lyq_163_2009/blog/static/1340826962010712104242953/

//table变量类型

declare

  type  type_table_emp_empno  is table of  emp.empno%type  index by  binary_integer;

  v_empnos type_table_emp_empno;

begin

  v_empnos(0) := 7369;

  v_empnos(1) := 7839;

  v_empnos(-1) := 9999;

  dbms_output.put_line(v_empnos(-1));

end;

/



//Record变量类型

declare

  type  type_record_dept  is record

  (

     deptno  dept.deptno%type,

     dname  dept.dname%type,

     loc  dept.loc%type

  );

  v_temp type_record_dept;

begin

  v_temp.deptno := 50;

  v_temp.dname := 'dname';

  v_temp.loc := 'BJ';

  dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);

end;

/



//使用%rowtype 声明record变量

declare

  v_temp dept%rowtype;

begin

  v_temp.deptno := 50;

  v_temp.dname := 'dname';

  v_temp.loc :='BJ';

  dbms_output.put_line(v_temp.deptno || ' ' || v_temp.dname);

end;

/



//SQL语句应用

declare 

  v_ename emp.ename%type;

  v_sal emp.sal%type;

begin

  select ename,sal into v_ename,v_sal from emp where empno=7900;

  --select ename,sal into v_ename,v_sal from emp where deptno=30;

  dbms_output.put_line(v_ename || ' ' || v_sal);

end;

/



//SQL语句应用

declare 

  v_emp emp%rowtype;

begin

  select * into v_emp from emp where empno=7369;

  dbms_output.put_line(v_emp.ename);

end;

/



//SQL语句应用

create table dept2(

  deptno number,

  dname varchar2(50),

  loc varchar2(50)

);

declare

  v_deptno dept.deptno%type := 50;

  v_dname dept.dname%type :='My Name';

  v_loc dept.loc%type := 'BJ';

begin

  insert into dept2 values(v_deptno,v_dname,v_loc);

end;

/

select * from dept2;

--drop table dept2;


//SQL语句应用

declare

  v_deptno dept2.deptno%type := 30;

  v_count number;

begin

  select deptno into v_deptno from dept2 where deptno=50;

  select count(*) into v_count from dept2;

  dbms_output.put_line('deptno:' || v_deptno);

  dbms_output.put_line('count:' || v_count);

  dbms_output.put_line(sql%rowcount || '条记录被影响...');

end;

/



//使用DDL语句

begin 

execute immediate 'create table T(nnn varchar2(20))';

end;

/


drop table T;




//选择语句

declare

  v_sal emp.sal%type;

begin

  select sal into v_sal from emp where empno=7369;

  if(v_sal < 1200)then

    dbms_output.put_line('low');

  elsif(v_sal < 2000) then

    dbms_output.put_line('middle');

  else 

    dbms_output.put_line('high');

  end if;

end;

/



//循环语句

declare

  i binary_integer := 1;

begin

  loop

    dbms_output.put_line('==' || i);

    i := i+1;

    exit when(i>=11);

  end loop;

end;

/



//循环语句

declare

  j binary_integer := 1;

begin

  while j<11 loop

    dbms_output.put_line('==' || j);

    j := j+1;

  end loop;

end;

/



//循环语句

begin

  for k in 1..10 loop

    dbms_output.put_line('==' || k);

  end loop;

  for k in reverse 1..10 loop

    dbms_output.put_line('==' || k);

  end loop;

end;

/