少年阿賓

          那些青春的歲月

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

          函數(shù)調(diào)用限制
          1、SQL語句中只能調(diào)用存儲函數(shù)(服務器端),而不能調(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í)行動態(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í)行動態(tài)的sql語句。

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

          Feedback

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

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

          主站蜘蛛池模板: 靖安县| 页游| 灵丘县| 崇阳县| 四川省| 和林格尔县| 五峰| 万安县| 阳东县| 南充市| 沾益县| 广南县| 巴青县| 贵州省| 宝兴县| 衡阳市| 黎平县| 汨罗市| 二连浩特市| 闸北区| 儋州市| 资兴市| 怀远县| 通河县| 鄯善县| 汨罗市| 甘南县| 称多县| 新宁县| 巨鹿县| 姚安县| 双牌县| 大埔区| 巴南区| 集贤县| 宁陵县| 永胜县| 正蓝旗| 望江县| 南乐县| 馆陶县|