PL/SQL程式單元

來源:互聯網
上載者:User

PL/SQL程式單元:

  • /**第一個預存程序,向tab_stu插入一條資料**/create or replace procedure firstPro --is相當於前面的declare在is後面寫申明變數is v_stu_age number:=23;begin  insert into tab_stu(stu_id,stu_name,stu_age,class_id)  values(5,'德瑪',v_stu_age,3);  commit;end firstPro;

  • /**帶參數的預存程序**/create or replace procedure paramPro(--預設是輸入參數v_stu_id varchar2,v_stu_name varchar2,v_stu_age number,v_class_id number) isbegin  insert into  tab_stu(stu_id,stu_name,stu_age,class_id)  values(v_stu_id,v_stu_name,v_stu_age,v_class_id);  commit;end paramPro;

  • /**預存程序更多情況下是在資料庫方做資料整合等複雜的工作需求:每天在規定時間需要備份tab_stu表的資料思路:1.備份上一次沒有備份的資料。2.這個時候就需要有一個id來儲存上次備份到那3.備份完後,需要修改id的值。4.還需要有一個備份表**/create or replace procedure backPro(--上次備份最後的idmax_id number) is--用遊標來儲存,需要備份的資料cursor c_tab_stu is select * from tab_stu where stu_id>max_id;--定義rowtyper_tab_stu tab_stu%rowtype;--儲存備份後的最大id的值v_max_id number;--索引值v_index number:=0;begin  if c_tab_stu%isopen then    null;  else     open c_tab_stu;  end if;  --迴圈備份  loop    fetch c_tab_stu into r_tab_stu;    exit when c_tab_stu%notfound;        insert into tab_stu_back(stu_id,stu_name,stu_age,class_id)     values(r_tab_stu.stu_id,r_tab_stu.stu_name,r_tab_stu.stu_age,r_tab_stu.class_id);    /**    下面這樣寫因為:    1.如果資料量很大的話,一次性提交或插入一條提交一次。都是不好的。     1.1.一次性提交,因為Oracle是將復原段存到記憶體中的,如果資料量很大記憶體會出現問題。     1.2.如果插入一條提交一次,上面的問題沒有了。但是效能非常的差    2.這裡就讓它每插入2000條就提交一次。    3.這裡記得歸零。    **/    if v_index>2000 then       commit;      v_index:=0;      else         v_index:=v_index+1;    end if;      end loop;    commit;    close c_tab_stu;  --修改tab_max_id的max_id的值為備份表中的最大id的值    select max(stu_id) into v_max_id from tab_stu_back;  update tab_max_id set max_id=v_max_id;  commit;end backPro;

  • --通過一個預存程序調用另一預存程序create or replace procedure invockParamisv_max_id number;begin select max_id into v_max_id from tab_max_id; --調用backpro預存程序 backpro(v_max_id);        end invockParam;
    這裡只要執行上面的預存程序就能備份了。
  • --建立調度任務定時器declare  jobno number;--這個可以隨便定義begin    sys.dbms_job.submit(jobno,                      what => 'invockParam;', --invockParam為預存程序的名稱                      Interval =>'TRUNC(sysdate,''mi'')+1/(24*60)' --定義時間間隔每分鐘                      );  commit;end;
    上面的定時也可以通過PL/SQL  developer建立,還是左邊的選擇DBMS_Jobs右鍵建立,在快顯視窗中,查看sql。輸入上面的內容就行。通過小齒輪運行。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.