首页 > 代码库 > Oracle SQL语句大全(四)

Oracle SQL语句大全(四)

PL/SQL里面执行DDL语句 begin execute immediate create table T(nnn varchar2(20) default ‘‘aaa‘‘)end; PL/SQL的分支语句: declare    v_sal emp.sal%type; begin    select sal into v_sal from emp     where empno=7369
   if(v_sal<1200then      dbms_output.put_line(low);  
  elsif(v_sal<2000then      dbms_output.put_line(middle); 
   else     dbms_output.put_line(high); 
  end if;
 end
pL/Sql循环 declare    i binary_integer:=1;
 begin    loop       dbms_output.put_line(i);    
   i:
=i+1;       exit when(i>=11);  
  end loop;
 end
PL
/SQL for循环
 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; exception 捕获异常 declare    v_temp number(4);
 begin    select empno into v_temp from emp where deptno=10; exception    when too_many_rows then    dbms_output.put_line(太多记录了);
 when others then    dbms_output.put_line(error);
 end; 没有数据错误 declare    v_temp number(4);
 begin    select empno into v_temp from emp where deptno=2222; exception    when no_data_found then    dbms_output.put_line(没数据);
 when others then    dbms_output.put_line(error); 

end/ 错误处理 create table errorlog ( id number primary key, errcode number, errmsg varchar2(1024), errdate date );  create sequence seq_errorlog_id start with 1 increment by 1

declare v_deptno dept.deptno%type:=10; v_errcode number; v_errmsg varchar2(1024);
 begin delete from dept where deptno=v_deptno; exception when others then     rollback;     v_errcode:=SQLCODE;     v_errmsg:=SQLERRN;     insert into errorlog values(seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate); 
    commit;

 end
游标 declare    cursor c is           select * from emp; 
   v_emp c%rowtype; 
   begin       open c;       fetch c into v_emp;           --(取游标的第一个值插入v_emp,在不断的循环)       dbms_output.put_line(v_emp.ename);       close c;    end; 例子 declare    cursor c is        select * from emp;   
      v_emp c%rowtype; 
    begin        open c; 
    loop        
fetch c into v_emp;  
      exit when(c%notfound);        dbms_output.put_line(v_emp.ename);  
    
end loop;   
  close c; 
end;  declare    cursor c is        select * from emp;
        v_emp c%rowtype;   
  begin        open c;        fetch c into v_emp;     while(c%found) loop        dbms_output.put_line(v_emp.ename);  
      
fetch c into v_emp;
      end
 loop; 
    close c; 
end;  declare    cursor c is          select * from emp;    begin          for v_emp in c loop          dbms_output.put_line(v_emp.ename);
     
end loop;
 end; 带参数的游标 declare    cursor c(v_deptno emp.deptno%type,v_job emp.job%type)  
  is     select ename,sal from emp where deptno=v_deptno and job=v_job; 
begin    for v_temp in c(30,chick) loop         dbms_output.put_line(v_temp.ename);  
  
end loop;
 end; 可更新的游标
exec p执行存储过程  begin 
p:
 end; 带参数的存储过程 create or replace procedure p (v_a in number,v_b number,v_ret out number, v_temp in out number
is 
begin if(v_a>v_b) then     v_ret:=v_a; 
   else     v_ret:=v_b; 
end 
if;     v_temp:=v_temp+1;
 end; 调用存储过程 declare v_a number:=3;
 v_b number:=4;
 v_ret number; v_temp number:=5;
begin    p(v_a,v_b,v_ret,v_temp); 
   dbms_output.put_line(v_ret);  
  dbms_output.put_line(v_temp);
 
end; show error返回错误信息 删除存储过程 存储过程中的函数 create or replace function sal_tax      (v_sal number)    
  return number is
 begin if(v_sal<2000then     
return 0.10; elsif(v_sal<2750then     
return 0.5
else     return 0.20;
 end if
end; 触发器 create or replace trigger trig
after update on dept
for each row
begin
update emp set deptno=:NEW.deptno where deptno=:OLD.deptno;
end; /

 

Oracle SQL语句大全(四)