zoukankan      html  css  js  c++  java
  • oracle函数创建及调用

    创建函数的语法如下:


    CREATE [OR REPLACE] FUNCTION function_name
    [ (argment [ { IN | OUT | IN OUT } ] Type ,
    argment [ { IN | OUT | IN OUT } ] Type ]
    RETURN return_type
    { IS | AS }
    <类型.变量的说明>
    BEGIN
    FUNCTION_body
    EXCEPTION
    其它语句
    END;


    例:

     1 CREATE OR REPLACE FUNCTION get_salary(
     2   Dept_no NUMBER, Emp_count OUT NUMBER)
     3   RETURN NUMBER 
     4   IS
     5   V_sum NUMBER;
     6 BEGIN
     7   SELECT SUM(sal), count(*) INTO V_sum, emp_count
     8   FROM emp WHERE deptno=dept_no;
     9   RETURN v_sum;
    10   EXCEPTION
    11     WHEN NO_DATA_FOUND THEN 
    12     DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
    13     WHEN OTHERS THEN 
    14     DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
    15 END get_salary;

    调用函数方法
    函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数:


    第一种参数传递格式称为位置表示法,格式为:
    例:

    1 DECLARE
    2   V_num NUMBER;
    3   V_sum NUMBER;
    4 BEGIN
    5   V_sum :=get_salary(30, v_num);
    6   DBMS_OUTPUT.PUT_LINE('30号部门工资总和:'||v_sum||',人数:'||v_num);
    7 END;


    第二种参数传递格式称为名称表示法,格式为 :
    例:

    1 DECLARE
    2   V_num NUMBER;
    3   V_sum NUMBER;
    4 BEGIN
    5   V_sum :=get_salary(emp_count => v_num, dept_no => 30);
    6   DBMS_OUTPUT.PUT_LINE('30号部门工资总和:'||v_sum||',人数:'||v_num);
    7 END;


    第三种参数传递格式称为混合表示法 :
    例:

     1 DECLARE 
     2   Var VARCHAR2(32);
     3 BEGIN
     4   Var := demo_fun('user1', 30, sex => '');
     5   DBMS_OUTPUT.PUT_LINE(var);
     6   Var := demo_fun('user2', age => 40, sex => '');
     7   DBMS_OUTPUT.PUT_LINE(var);
     8   Var := demo_fun('user3', sex => '', age => 20);
     9   DBMS_OUTPUT.PUT_LINE(var);
    10 END;


    参数默认值
    在CREATE OR REPLACE FUNCTION 语句中声明函数参数时可以使用DEFAULT关键字为输入参数指定默认值。
    例:

     1 CREATE OR REPLACE FUNCTION demo_fun(
     2   Name VARCHAR2,vAge INTEGER,
     3   Sex VARCHAR2 DEFAULT '')
     4   RETURN VARCHAR2 
     5 IS
     6   V_var VARCHAR2(32);
     7 BEGIN
     8   V_var := name||''||TO_CHAR(age)||'岁,'||sex;
     9   RETURN v_var;
    10 END; 


    具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数将使用该参数的默认值。
    但当调用者为默认参数提供实际参数时,函数将使用实际参数值。
    在创建函数时,只能为输入参数设置默认值,而不能为输入/输出参数设置默认值。
    例:

     1 DECLARE 
     2   Var VARCHAR(32);
     3 BEGIN
     4   Var := demo_fun('user1', 30);
     5   DBMS_OUTPUT.PUT_LINE(var);
     6   Var := demo_fun('user2', age => 40);
     7   DBMS_OUTPUT.PUT_LINE(var);
     8   Var := demo_fun('user3', sex => '', age => 20);
     9   DBMS_OUTPUT.PUT_LINE(var);
    10 END;

     
    可以使用DROP语句删除函数:
    DROP FUNCTION function_name;

    授权执行权给相关的用户或角色
    GRANT语法:
    GRANT system_privilege | role
    TO user | role | PUBLIC [WITH ADMIN OPTION]

    GRANT object_privilege | ALL ON schema.object
    TO user | role | PUBLIC [WITH GRANT OPTION]
    例:

    GRANT EXECUTE ON dbms_job TO PUBLIC WITH GRANT OPTION


    与过程相关的权限:
    CREATE ANY PROCEDURE
    DROP ANY PROCEDURE

    与过程相关数据字典
    USER_SOURCE ,USER_PROCEDURES ,USER_ERRORS

     

     

     

  • 相关阅读:
    JavaScript之美读书笔记一
    关于form与表单操作
    正则表达式中的字符转义
    [codeforces 391D2]Supercollider
    [AMPPZ 2013]Bytehattan
    [那些你所不知道的鬼畜写法]平衡树学习笔记
    [AHOI 2006][BZOJ 1269]文本编辑器editor
    [BZOJ 3622]已经没有什么好害怕的了
    [POI 2008]Mafia
    [POI 2008][BZOJ 1132]Tro
  • 原文地址:https://www.cnblogs.com/-maji/p/7255908.html
Copyright © 2011-2022 走看看