zoukankan      html  css  js  c++  java
  • oracle function用法

    函数调用限制
    1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
    2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
    3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
    4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句

    1.function函数的语法如下:

    1 create or replace function function_name (  
    2      argu1 [mode1] datatype1, --定义参数变量  
    3      argu2 [mode2] datatype2 --定义参数变量  
    4  ) return datatype --定义返回的数据类型  
    5 is   
    6   
    7 begin  
    8   
    9 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语句。

    函数中使用游标

    create or replace function getcustprodinstaddr(in_CustId in number,in_area_code in number)   
    return varchar2   
    is  
      Result varchar2(4000);  
      v_acc_nbr varchar2(400);  
      tempCount number:=1;  
      type ref_cursor is ref cursor;  
      v_cursor ref_cursor;  
    begin  
      Result:='';  
      open v_cursor for   
      'select install_addr from tb_prd_prd_inst_'||to_char(in_area_code)||  
      ' where PRD_INST_STAS_ID not in(''1003'',''1101'',''1401'',''1102'')   
      and own_cust_id='||to_char(in_CustId)||' order by install_date desc';  
      loop  
        fetch v_cursor into v_acc_nbr;  
        exit when v_cursor%notfound;  
        if(tempCount>8) then  
            goto label_end;  
        end if;  
        Result:=v_acc_nbr||','||Result;  
        tempCount := tempCount +1;  
      end loop;  
      <<label_end>>  
      close v_cursor;  
      return(Result);  
      exception   
        when others then  
        if(v_cursor%isopen) then  
            close v_cursor;  
        end if;  
        return '';  
    end getcustprodinstaddr;  
  • 相关阅读:
    Git与GitHub关联
    利用GitHub上的SimpleMemory装扮博客园
    第5课第4节_Binder系统_C程序示例_测试与总结
    第5课第1节_Binder系统_C程序示例_框架分析
    第4课第4节_Android灯光系统_源码分析_电池灯
    第4课第3节_Android灯光系统_编写HAL_lights.c
    第2课第1节_Android灯光系统_led_class驱动
    第4课第1节_Android灯光系统_总体框架
    Android 优秀博客
    4.5节_Android硬件访问服务使用反射
  • 原文地址:https://www.cnblogs.com/zougang/p/9209706.html
Copyright © 2011-2022 走看看