少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          函數調用限制
          1、SQL語句中只能調用存儲函數(服務器端),而不能調用客戶端的函數
          2、SQL只能調用帶有輸入參數,不能帶有輸出,輸入輸出函數
          3、SQL不能使用PL/SQL的特有數據類型(boolean,table,record等)
          4、SQL語句中調用的函數不能包含INSERT,UPDATE和DELETE語句

          1.function函數的語法如下:

                create or replace function function_name (

                 argu1 [mode1] datatype1, --定義參數變量

                 argu2 [mode2] datatype2 --定義參數變量

             ) return datatype --定義返回的數據類型

            is 

            begin

            end;

          執行 var v1 varchar2(100)
                exec :v1:=function_name

          2.不帶任何參數的定義

          create or replace function get_user 

          return varchar2 

          is 

          Result varchar2(50); --定義變量

          begin 

          select username into Result from user_users; 

          return(Result); --返回值

          end get_user;

          3.帶有in參數的

          create or replace function get_sal(

          empname in varchar2

          ) return number 

          is 

          Result number; 

          begin 

          select sal into Result from emp where ename=empname; 

          return(Result); 

          end;

          執行: SQL> var sal number
          SQL> exec :sal:=get_sal('scott');

          4.帶out參數的

          create or replace function get_info(

          e_name varchar2,

          job out varchar2

          ) return number 

          Is

          Result number; 

          begin 

          select sal,job into Result,job from emp where ename=e_name;
          return(Result);
          end;

          執行: SQL> var job varchar2(20)
          SQL> var dname varchar2(20)
          SQL> exec :dname:=get_info('SCOTT',:job)

          5.帶in out參數的

          6.函數調用舉例

          create or replace function f_sys_getseqid(
              v_seqname           IN VARCHAR2,
              v_provincecode      IN VARCHAR2    --省編碼
          ) return Varchar2
          IS
              iv_date             VARCHAR2(8);
              iv_seqname          VARCHAR2(50);
              iv_sqlstr           VARCHAR2(200);
              iv_seq              VARCHAR2(8);
              iv_seqid            VARCHAR2(16);
          BEGIN
              iv_seqname := LOWER(TRIM(v_seqname));
              iv_sqlstr := 'SELECT '||iv_seqname||'.nextval FROM DUAL';
              EXECUTE IMMEDIATE iv_sqlstr INTO iv_seq;--執行動態的sql語句,執行相似的一組語句
              IF v_seqname = 'SEQ_FUNCROLE_ID' THEN
                iv_seqid:= 'ESS' || LPAD(iv_seq,5,'0');
              ELSE
                SELECT substrb(v_provincecode,1,2)||TO_CHAR(SYSDATE,'yymmdd') INTO iv_date FROM DUAL;
                iv_seqid:= iv_date || LPAD(iv_seq,8,'0');
              END IF;
              RETURN iv_seqid;
          EXCEPTION
              WHEN OTHERS THEN
              RETURN NULL;
          END;

            調用方式如下:

              SELECT TO_NUMBER(F_SYS_GETSEQID('SEQ_TERMTRADE_ID', V_PROVINCE_CODE)) INTO V_BATCH_ID FROM DUAL;

             EXECUTE IMMEDIATE的說明:執行動態的sql語句。

          posted on 2012-08-12 20:42 abin 閱讀(33338) 評論(2)  編輯  收藏 所屬分類: oracle

          Feedback

          # re: oracle function用法 2015-06-08 11:04 工單
          版本  回復  更多評論
            

          # re: oracle function用法 2016-06-21 09:49 hh7
          check  回復  更多評論
            

          主站蜘蛛池模板: 天峻县| 濮阳县| 田东县| 武穴市| 长寿区| 凤冈县| 伊金霍洛旗| 松阳县| 汉中市| 成都市| 广平县| 大悟县| 娱乐| 河南省| 新邵县| 西青区| 包头市| 新郑市| 句容市| 四平市| 凌源市| 彰武县| 锡林浩特市| 连城县| 衡东县| 宿松县| 凤山市| 封开县| 治县。| 宣武区| 冷水江市| 抚州市| 邻水| 土默特右旗| 隆子县| 鸡泽县| 合肥市| 兴文县| 库车县| 大庆市| 苍梧县|