BlogJava-无所惧,无所悔,为梦想执着的拼搏-文章分类-Oracle 技术文档http://www.blogjava.net/DreamFight/category/37916.htmlzh-cnThu, 26 Feb 2009 08:15:49 GMTThu, 26 Feb 2009 08:15:49 GMT60Oracle自定义函数http://www.blogjava.net/DreamFight/articles/256818.htmlDreamFightDreamFightThu, 26 Feb 2009 06:57:00 GMThttp://www.blogjava.net/DreamFight/articles/256818.htmlhttp://www.blogjava.net/DreamFight/comments/256818.htmlhttp://www.blogjava.net/DreamFight/articles/256818.html#Feedback0http://www.blogjava.net/DreamFight/comments/commentRss/256818.htmlhttp://www.blogjava.net/DreamFight/services/trackbacks/256818.html
  • --没有参数的函数   
  • create or replace function get_user return varchar2 is  
  •   v_user varchar2(50);   
  • begin  
  •   select username into v_user from user_users;   
  •   return v_user;   
  • end get_user;   
  •   
  • --测试   
  • 方法一   
  • select get_user from dual;   
  •   
  • 方法二   
  • SQL> var v_name varchar2(50)   
  • SQL> exec :v_name:=get_user;   
  •   
  • PL/SQL 过程已成功完成。   
  •   
  • SQL> print v_name   
  •   
  • V_NAME   
  • ------------------------------   
  • TEST   
  •   
  • 方法三   
  • SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);   
  • 当前数据库用户是:TEST   
  •   
  • PL/SQL 过程已成功完成。  
  • Sql代码 复制代码
    1. --带有IN参数的函数   
    2. create or replace function get_empname(v_id in number) return varchar2 as  
    3.   v_name varchar2(50);   
    4. begin  
    5.   select name into v_name from employee where id = v_id;   
    6.    return v_name;   
    7. exception   
    8.   when no_data_found then  
    9.     raise_application_error(-20001, '你输入的ID无效!');   
    10. end get_empname;  

     

    附:

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

     

    查看函数院源代码
    oracle会将函数名及其源代码信息存放到数据字典中user_source
    select text from user_source where name='GET_EMPNAME';


    删除函数
    drop function get_empname



    DreamFight 2009-02-26 14:57 发表评论
    ]]>