Codooba
          JCenter
          posts - 20,comments - 9,trackbacks - 0

          商業(yè)規(guī)則和業(yè)務(wù)邏輯可以通過(guò)程序存儲(chǔ)在oracle中,這個(gè)程序就是存儲(chǔ)過(guò)程。

          存儲(chǔ)過(guò)程是SQL, PL/SQL, JAVA 語(yǔ)句的組合, 它使你能將執(zhí)行商業(yè)規(guī)則的代碼從從你的應(yīng)用程序中移動(dòng)到數(shù)據(jù)庫(kù)。這樣的結(jié)果就是,代碼存儲(chǔ)一次但是能夠被多個(gè)程序使用

          要?jiǎng)?chuàng)建一個(gè) 過(guò)程對(duì)象(procedural object),必須有 CREATE PROCEDURE 系統(tǒng)權(quán)限。如果這個(gè)過(guò)程對(duì)象需要被其他的用戶(hù)schema 使用,那么你必須有 CREATE ANY PROCEDURE 權(quán)限。

          執(zhí)行 procedure 的時(shí)候,可能需要excute權(quán)限。或者EXCUTE ANY PROCEDURE 權(quán)限。

          如果單獨(dú)賦予權(quán)限,如下例所示:  grant  execute on MY_PROCEDURE  to Jelly

          調(diào)用一個(gè)存儲(chǔ)過(guò)程的例子: execute MY_PROCEDURE( 'ONE PARAMETER');

          PROCEDURE 和 FUNCTION 的區(qū)別。 function有返回值,并且可以直接在Query中引用function和或者使用function的返回值。

           PACKAGE 是function,procedure,variables 和sql 語(yǔ)句的組合。package允許多個(gè)procedure使用同一個(gè)變量和游標(biāo)。

          創(chuàng)建 procedure的語(yǔ)法:

          CREATE [ OR REPLACE ] PROCEDURE [ schema.]procedure
            [(argument [IN | OUT | IN OUT ] [NO COPY] datatype
              [, argument [IN | OUT | IN OUT ] [NO COPY] datatype]...
            )]
          [ authid { current_user | definer }]
          { is | as } { pl/sql_subprogram_body |
          language { java name 'String' | c [ name, name] library lib_name
          }]

          sql 代碼
          1. CREATE PROCEDURE sam.credit (acc_no IN NUMBER, amount IN NUMBER) AS    
          2.    BEGIN  
          3.       UPDATE accounts    
          4.       SET balance = balance + amount    
          5.       WHERE account_id = acc_no;    
          6.    END;  

           

          可以使用 create or replace procedure 語(yǔ)句, 這個(gè)語(yǔ)句的用處在于,你之前賦予的excute權(quán)限都將被保留。

          IN, OUT, IN OUT 用來(lái)修飾參數(shù)。IN 表示這個(gè)變量必須被調(diào)用者賦值然后傳入到PROCEDURE進(jìn)行處理。OUT 表示PRCEDURE 通過(guò)這個(gè)變量將值傳回給調(diào)用者。IN OUT 則是這兩種的組合。

          authid代表兩種權(quán)限: 定義者權(quán)限(difiner right 默認(rèn)),執(zhí)行者權(quán)限(invoker right)。定義者權(quán)限說(shuō)明這個(gè)procedure中涉及的表,視圖等對(duì)象所需要的權(quán)限只要定義者擁有權(quán)限的話(huà)就可以訪(fǎng)問(wèn)。執(zhí)行者權(quán)限則需要調(diào)用這個(gè)procedure的用戶(hù)擁有相關(guān)表和對(duì)象的權(quán)限。

          posted on 2007-07-02 15:46 Zhangwenlong 閱讀(809) 評(píng)論(1)  編輯  收藏

          FeedBack:
          # re: oracle存儲(chǔ)過(guò)程基礎(chǔ)知識(shí)
          2016-07-01 14:45 | 1`2

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南昌市| 大连市| 滨州市| 长沙市| 清新县| 达尔| 秦皇岛市| 高清| 盐城市| 茌平县| 大石桥市| 江西省| 富裕县| 如东县| 左权县| 南京市| 崇礼县| 河北省| 天祝| 神木县| 北流市| 石棉县| 丽水市| 墨江| 濮阳县| 富锦市| 巩留县| 增城市| 方正县| 资源县| 北宁市| 濮阳市| 汉中市| 林口县| 岑溪市| 宜州市| 竹北市| 桦川县| 清水河县| 九龙县| 新源县|