1. 程式人生 > >java SSM第三章學習內容(oracle儲存過程)

java SSM第三章學習內容(oracle儲存過程)

儲存過程

edit進入文字編輯器中
/指定語句
DBMS_OUTPUT.PUT_LINE('操作完畢'||a);輸出一段話
commit;提交
set serverout on   列印一段話之前要先設定

基本型別

declare 
    //設定變數,直接賦值可以:=9,不賦值a number(5);
      a number(5):=9;

begin    
    //查詢老師為:王斌的工資(wage)並賦值給a
      select wage into a from teachers where name='王彤';

    if(a<5000)
    then
    update teachers set wage=wage+300 where name='王彤';
    else
    update teachers set wage=wage-300 where name='王彤';
    end if;
    
    //提交
    commit;
    //下面如果想成功後輸出語句,就要在命令列設定       set serverout on
    DBMS_OUTPUT.PUT_LINE('操作完畢'||a);

    
end;

一.物件型別
declare
        jw TEACHERS%ROWTYPE;     
begin
        select * into jw from teachers where name='王彤';
        if(jw.WAGE>2000)
        then
        update teachers set wage=wage+500 where name='王彤';
        else
        update teachers set wage=wage-500 where name='王彤';
        end if;
        commit;
        dbms_output.put_line('操作完畢'||jw.wage);
end;


二.swich 1
    declare
    a number:=1;
begin
  case a
    when 0 then DBMS_OUTPUT.PUT_LINE('A=0');
    WHEN 1 then DBMS_OUTPUT.PuT_LINE('A=1');
    else DBMS_OUTPUT.PUT_LINE('都不是');
    END CASE;
END;


二.2.
declare
    gongzi teachers.wage%type;
begin
    select wage into gongzi FROM teachers where name='林飛';

    case
        when gongzi>1000
        then update teachers set wage=wage*1.2 where name='林飛';
  
        when gongzi between 2000 and 4000
          then update teachers set wage=wage*1.3 where name='林飛';
         else update teachers set wage=wage*1.5 where name='林飛';
    end case;
    commit;
    DBMS_OUTPUT.PUT_LINE(gongzi);
end;

二.3
select case name when '孔世傑' then '陳總' else name end ,wage from Teachers;


三.死迴圈
declare
  i number:=0;
  sum1 number:=0;
begin
  loop
    i:=i+1;
    sum1:=sum1+1;
    exit when i=100;
    end loop;
    DBMS_OUTPUT.PUT_LINE(SUM1);
end;


四.while

declare
      avgSal Teachers.wage%Type;
begin
      select avg(wage)into avgSal FROM Teachers;
      while(avgSal<2000)
          loop
        update Teachers set wage=wage+100;
        select avg(wage)into avgSal FROM Teachers;
            exit when avgSal>3000;
            end loop;
        commit;
        DBMS_OUTPUT.PUT_LINE('cg');
end;


五.for迴圈

declare
      i number:=0;
      sum1 number:=0;
begin
      for i in 1..100
        loop
          sum1:=sum1+i;
          end loop;
          DBMS_OUTPUT.PUT_LINE(sum1);
end;


六.普通順序

七. go結構
    them goto b
    <<b>>    

八.帶引數的儲存過程
create or replace procedure aa(name2 teachers.name%type)
as
       gongzi TEACHERS.WAGE%type;
begin
       select wage into gongzi from teachers where name=name2;
       DbMS_OUTPUT.PUT_LINE('CG');
end;

execute aa('xx')


九.
create or replace function fun_aa(name2 varchar2或則name2 teachers.name%type)
return teachers.wage%type
is
    gz teachers.wage%type;
begin
    select wage into gz from teachers where name=name2;
    return gz;
    DbMS_OUTPUT.PUT_LINE('CG');
end;

select function('jw') from dual;

十.帶隱式遊標、全域性變數SQL%ROWCOUNT

begin
  update TEACHERS SET wage=2000 WHERE NAME='林飛';
  if(SQL%ROWCOUNT>1)
  THEN
    ROLLBACK;
    UPDATE TEACHERS SET WAGE=1000;
    END IF;
    COMMIT;
  end;