ITPub博客

首页 > 数据库 > Oracle > 数据库开发---常用对象-函数

数据库开发---常用对象-函数

原创 Oracle 作者:lff1530983327 时间:2015-01-12 16:51:50 0 删除 编辑
 

 

数据库开发---常用对象-函数,存储过程,游标,触发器,包

----函数

1>函数和存数过程的区别:

 

    存储过程                                            函数

 

    ----------------------------------                -------------------------------

 

    不能被作为表达式调用                                只能作为表达式被调用

 

    声明头部关键字为procedure                        声明头部关键字为function

 

    声明头部不包含return关键字来描述返回类型         头部必须包含return关键字,且PL/SQL块中至少包含一个有效的return语句

 

    可以通过out,in out返回零个或多个值               通过return语句返回一个与头部声明中类型一致的值,也可使用in,in out返回值

 

    SQL语句中不可调用存储过程                        SQL语句可以调用函数

 

    多用于数据库中完成特定的操作,如删除,更新,插入等DML操作     多用于特定的数据如选择等

 

---创建语句

create or replace function test_func_1 return varchar2 is

begin

  dbms_output.put_line('hello world!');

  return 1;

end;

---函数的执行

create or replace function get_user return varchar2 is

  v_user varchar2(10);

begin

  select username into v_user from user_users;

  return v_user;

end;

/

1、使用变量接收。

SQL> var current_user varchar2(10)

SQL> exec :current_user:=get_user

 

2、使用SQL

 select get_user from dual;

3、使用exec调用

execute

exec

SQL> set serveroutput on

4、call

call dbms_output.put_line('当前登录的用户是: '||get_user);

5、块中调用(匿名块中或函数存储过程中都可以)

begin

  dbms_output.put_line('当前登录的用户是: ' || get_user);

end;

/ declare v_user varchar2(10);

begin

  v_user := get_user;

end;

/

select get_user from dual;

 

2>常用的查询函数相关定义的语句:

select owner,object_name,object_type from dba_objects where object_name='GET_INFO';

select text from user_source where name='TEST_FUNC_1';--查出函数定义信息

1.得到一个表或索引的ddl语句

SELECT DBMS_METADATA.GET_DDL('TABLE','DEPT','SCOTT') FROM DUAL;

select dbms_metadata.get_ddl('INDEX','PK_DEPT','SCOTT') from dual;

2.得到一个用户下的所有表,索引,存储过程的ddl

SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)

FROM USER_OBJECTS u

where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE');

3.得到所有表空间的ddl语句

SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)

FROM DBA_TABLESPACES TS;

4.得到所有创建用户的ddl

SELECT DBMS_METADATA.GET_DDL('USER',U.username)

FROM DBA_USERS U;

3>函数中传入传出参数的用法

create or replace function get_sal(name IN varchar2) -----IN 即是传入的变量

 return number as

  v_sal emp.sal%type;

begin

  select sal into v_sal from emp where ename = NAME;

  return v_sal;

end;

 

SELECT   GET_SAL('SCOTT') FROM DUAL;

 

 

create or replace function get_sal(name out varchar2) -----IN 即是传入的变量,不能作为赋值目标

 return number as

  v_sal emp.sal%type;

begin

  select sal into v_sal from emp where ename = name;

  name := 'SCOTT';

  return v_sal;

end;

   

    create or replace function get_info(name in varchar2,

                                        ejob out varchar2) return varchar2 as

      v_dname dept.dname%type;

    begin

      select e.job, d.dname

        into ejob, v_dname

        from emp e, dept d

       where e.deptno = d.deptno

         and e.ename = name;

      return v_dname;

    end;

    /

declare

  ----v_job用来接收需要传出的值,而in参数则不能接受传入参数! v_dname接收的是传入的的值

  v_job   varchar2(20) := 'abc';

  v_dname varchar2(20);

begin

  dbms_output.put_line(v_job);

  v_dname := get_info('JAMES', v_job);

  dbms_output.put_line('部门:' || v_dname || ' 职位:' || v_job);

end;

/

----传值的方式

v_dname:=get_info(name =>'JAMES',ejob => v_job);

v_dname:=get_info('JAMES',ejob => v_job);

 

4>函数的语法结构

create or replace function func_name  return type  is/as

begin

            ; 

 

  end;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30018455/viewspace-1399244/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-11-12

  • 博文量
    72
  • 访问量
    49758