Oracle笔记 八、PL/SQL跳转/判断/循环语句块

--goto跳转语句
--在goto 后,跳转到相应的语句,然后执行该语句和后面所有语句
begin
     dbms_output.put_line('goto开始了');
     goto c;
          --不被执行
          dbms_output.put_line('goto');
          dbms_output.put_line('goto');
          dbms_output.put_line('goto');
          dbms_output.put_line('goto');
    <<a>>
           dbms_output.put_line('goto aaa');           
    <<b>>
           dbms_output.put_line('goto bbb');
    <<c>>
           dbms_output.put_line('goto ccc');
end;   
 
--PL/SQL中的sql和rowcount属性:sql代表最近执行的sql语句,rowcount代表最近执行的sql语句影响的行数
declare
  vCount number;
  vDeptno dept2.deptno%type := 10;
begin
  --select count(*) into vCount from dept2;
  --update dept2 set dname = dname || '~.~' where deptno = vDeptno;
  --delete from dept2 where deptno = 40;
  insert into dept2 select * from dept;
  dbms_output.put_line('count:' || vCount);
  dbms_output.put_line(sql%rowcount || '行受影响');
end;
 
--PL/SQL执行sql语句
begin
  execute immediate 'create table temp as select * from dept';
end;
 
--动态sql,把sql语句放到变量中并传递参数
declare
     sqlstr varchar2(100);
begin
     sqlstr := 'insert into scott.dept values(12, :1, :abc)';
     --变量是按照占位符顺序插入的
     execute immediate sqlstr using '教务部', '武汉';
end;
 
select * from scott.dept;
 
--动态sql,把查询结果赋值给变量
declare
       dept_row_data scott.dept%rowtype;
       sqlstr varchar2(100);
begin
     sqlstr := 'select * from scott.dept where deptno = 11';
     execute immediate sqlstr into dept_row_data;
     dbms_output.put_line(dept_row_data.deptno);
end;
 
--if 语句
--select * from emp;
declare
     vSal emp.sal%type;
begin
  select sal into vSal from emp where empno = 7566;
  if (vSal < 1200) then
    dbms_output.put_line('小于1200');
  elsif (vSal < 2000) then
    dbms_output.put_line('小于2000');
  else
    dbms_output.put_line('大于2000');
  end if;
end;  
 
--loop循环
declare
  i binary_integer := 10;
begin
  loop
    dbms_output.put_line(i);
    i := i - 1;
    exit when(i < 1);
  end loop;
end;
 
--while循环
declare
  i binary_integer := 1;
begin
  while i < 11 loop
     dbms_output.put_line(i);
     i := i + 1;
  end loop;
end;
 
--for 循环
begin
  for i in 1..10 loop
    dbms_output.put_line(i);
  end loop;
  for i in reverse 1..10 loop
    dbms_output.put_line(i);
  end loop;
end;
posted on 2011-05-03 15:37  hoojo  阅读(5270)  评论(0编辑  收藏  举报