少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          函數(shù)調(diào)用限制
          1、SQL語句中只能調(diào)用存儲(chǔ)函數(shù)(服務(wù)器端),而不能調(diào)用客戶端的函數(shù)
          2、SQL只能調(diào)用帶有輸入?yún)?shù),不能帶有輸出,輸入輸出函數(shù)
          3、SQL不能使用PL/SQL的特有數(shù)據(jù)類型(boolean,table,record等)
          4、SQL語句中調(diào)用的函數(shù)不能包含INSERT,UPDATE和DELETE語句

          1.function函數(shù)的語法如下:

                create or replace function function_name (

                 argu1 [mode1] datatype1, --定義參數(shù)變量

                 argu2 [mode2] datatype2 --定義參數(shù)變量

             ) return datatype --定義返回的數(shù)據(jù)類型

            is 

            begin

            end;

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

          2.不帶任何參數(shù)的定義

          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參數(shù)的

          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;

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

          4.帶out參數(shù)的

          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;

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

          5.帶in out參數(shù)的

          6.函數(shù)調(diào)用舉例

          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;--執(zhí)行動(dòng)態(tài)的sql語句,執(zhí)行相似的一組語句
              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;

            調(diào)用方式如下:

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

             EXECUTE IMMEDIATE的說明:執(zhí)行動(dòng)態(tài)的sql語句。

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

          Feedback

          # re: oracle function用法 2015-06-08 11:04 工單
          版本  回復(fù)  更多評(píng)論
            

          # re: oracle function用法 2016-06-21 09:49 hh7
          check  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 许昌市| 钦州市| 鄢陵县| 疏勒县| 新干县| 米脂县| 饶阳县| 徐汇区| 永康市| 盐边县| 宝鸡市| 三河市| 灵寿县| 南和县| 河东区| 嘉峪关市| 天峻县| 泽普县| 冷水江市| 醴陵市| 如东县| 兴安盟| 吉木乃县| 图木舒克市| 富源县| 赣榆县| 吉水县| 维西| 沈丘县| 合水县| 泰兴市| 广元市| 河西区| 胶南市| 赫章县| 顺平县| 安国市| 铁岭市| 九台市| 安吉县| 奉新县|