精华内容
下载资源
问答
  • Oracle 存储过程procedure函数function用法,以及package用法使用scott登录normal,简单的操作emp表实现存储过程,函数,包定义存储过程:create or replace procedure get_user_name(userid in emp.empno%type)is...

    Oracle 存储过程procedure,函数function用法,以及package用法使用scott登录normal,简单的操作emp表实现存储过程,函数,包

    定义存储过程:

    create or replace procedure get_user_name(userid in emp.empno%type)

    is

    xx emp.ename%type;

    begin

    select ename into xx from emp where empno=userid;

    dbms_output.put_line(xx);

    end;

    定义函数:

    create or replace function get_user_sal(userid in emp.empno%type) return number is

    salary emp.sal%type;

    begin

    select sal into salary from emp where empno=userid;

    return salary;

    exception

    when NO_data_founD then

    dbms_output.put_line('NOT FOUND!');

    end get_user_sal;

    定义包头:

    create or replace package ex

    is

    procedure get_user_name(userid in emp.empno%type) ;

    function get_user_sal(userid in emp.empno%type) return number;

    end ex;

    定义包体:

    create or replace package body ex

    is

    procedure get_user_name(userid in emp.empno%type)

    is

    xx emp.ename%type;

    begin

    select ename into xx from emp where empno=userid;

    dbms_output.put_line(xx);

    end;

    function get_user_sal(userid in emp.empno%type) return number

    展开全文
  • 函数function 用于返回特定的数据 经常需要通过执行SQL语句来返回特定数据 基于这些操作建立特定的函数 函数包含return子句 用来进行数据操作 并返回单独的函数值 函数的调用只能在一个表达式 create or replace ...

    定义包头:

    create or replace package ex

    is

    procedure get_user_name(userid in emp.empno%type) ;

    function get_user_sal(userid in emp.empno%type) return number;

    end ex;

    定义包体:

    create or replace package body ex

    is

    procedure get_user_name(userid in emp.empno%type)

    is

    .........

    end;

    function get_user_sal(userid in emp.empno%type) return number

    is

    .........

    exception

    when NO_data_founD then

    dbms_output.put_line('NOT FOUND!');

    end;

    end ex;

    定义存储过程:

    create or replace procedure get_user_name(userid in emp.empno%type)

    is

    xx  emp.ename%type;

    begin

    select ename into xx from emp where empno=userid;

    dbms_output.put_line(xx);

    end;

    定义函数:

    create or replace function get_user_sal(userid in emp.empno%type) return number

    is

    salary emp.sal%type;

    begin

    select sal into salary from emp where empno=userid;

    return salary;

    exception

    when NO_data_founD then

    dbms_output.put_line('NOT FOUND!');

    end get_user_sal;

    procedure

    CREATE OR REPLACE PROCEDURE 过程名

    (参数名 [OUT]参数类型) 默认in  in/out/in out 三种参数形式

    is

    变量

    begin

    过程体

    end;/

    执行存储过程  exec procedure_name;

    函数function

    用于返回特定的数据 经常需要通过执行SQL语句来返回特定数据 基于这些操作建立特定的函数

    函数包含return子句 用来进行数据操作 并返回单独的函数值 函数的调用只能在一个表达式

    create or replace function 函数名(参数 in/out 参数类型)

    return 类型 as/is

    变量名 类型;

    begin

    函数过程;

    return 变量名

    end;

    参数  默认输入参数 in

    输出参数 out

    输入输出参数 in/out     out 需要在执行的时候设定变量来接收

    调用函数 可以再任意一个PL/SQL程序块中调用    有返回值 必须作为表达式的一部分来调用

    =:函数名(参数名)

    删除函数 drop function 函数名;

    变量类型  table.column%type 指定为某个表的某一个列的数据类型

    展开全文
  • 一、java调用PROCEDURE1.1 新建存储过程如下代码中,关键字说明:IN :表示入参OUT:表示出参RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的idSEQ_WORK_REPORT_ID.nextval:表示的是序列,读者...

    由于网络上这种方面的文章相对较少较乱,所以特别来写一篇。

    一、java调用PROCEDURE

    1.1 新建存储过程

    如下代码中,关键字说明:

    IN :表示入参

    OUT:表示出参

    RETURNING :表示语句执行完后的返回值。这里返回的是刚插入的数据的id

    SEQ_WORK_REPORT_ID.nextval:表示的是序列,读者自行新建序列。有关序列的创建,请自行搜索。

    CREATE OR REPLACE PROCEDURE p_save_note_details(i_login_user_id IN NUMBER, i_receive_user_id IN VARCHAR2,

    i_work_content IN VARCHAR2, i_next_content IN VARCHAR2,

    i_work_help IN VARCHAR2, i_remark IN VARCHAR2,

    i_start_date IN VARCHAR2, i_end_date IN VARCHAR2,

    i_id_for_save IN VARCHAR2,

    r_note_id OUT NUMBER, r_send_id OUT NUMBER) IS

    v_seq_id NUMBER; --定义变量

    BEGIN

    -- 拿出序列id

    SELECT SEQ_WORK_REPORT_ID.nextval

    INTO v_seq_id

    FROM dual;

    -- 插入主表

    INSERT INTO T_WEEK_NOTE_DETAIL (ID, LOGIN_USER_ID, RECEIVE_USER_ID, WORK_CONTENT, NEXT_CONTENT, WORK_HELP, REMARK,

    START_DATE, END_DATE)

    VALUES (v_seq_id, i_login_user_id, i_receive_user_id, i_work_content, i_next_content, i_work_help, i_remark,

    to_date(i_start_date, 'yyyy-mm-dd hh24:mi:ss'), to_date(i_end_date, 'yyyy-mm-dd hh24:mi:ss'))

    RETURNING ID INTO r_note_id;

    -- 插入关联表

    INSERT INTO T_WEEK_REPORT_SEND (ID, LOGIN_USER_ID, OPTION_TYPE, SEND_TYPE)

    SELECT

    v_seq_id AS ID,

    to_number(tmp.column_value) AS LOGIN_USER_ID,

    1 AS OPTION_TYPE,

    decode(to_number(tmp.column_value), i_login_user_id, 1, 2) AS SEND_TYPE

    FROM

    (SELECT column_value

    FROM TABLE (fn_split(i_id_for_save, ','))) tmp;

    -- 返回序列id给出参,用来校验的。防止上一步的insert报错退出而不知道。

    SELECT v_seq_id

    INTO r_send_id

    FROM dual;

    -- 提交修改

    COMMIT;

    END;

    1.2 java调用

    核心代码如下。

    先获取 java.sql.Connection

    调用conn.prepareCall 得到CallableStatement

    设置CallableStatement入参以及设置出参类型

    获取出参,校验完成。

    java.sql.Connection conn = context.getDBService().getDBConnection(dbName);//获取对应数据库连接池

    //设置入参

    CallableStatement statmentCall = conn.prepareCall("{call p_save_note_details(?,?,?,?,?,?,?,?,?,?,?)}");

    statmentCall.setInt(1, Integer.valueOf(login_user_id));

    statmentCall.setString(2, receive_user_id);

    statmentCall.setString(3, work_content);

    statmentCall.setString(4, next_content);

    statmentCall.setString(5, work_help);

    statmentCall.setString(6, remark);

    statmentCall.setString(7, start_date);

    statmentCall.setString(8, end_date);

    if (receive_user_id.contains(login_user_id)) {//剔除接收人是自己的记录

    statmentCall.setString(9, receive_user_id);

    } else {

    statmentCall.setString(9, login_user_id + "," + receive_user_id);

    }

    //设置出参类型

    statmentCall.registerOutParameter(10, OracleTypes.NUMBER);

    statmentCall.registerOutParameter(11, OracleTypes.NUMBER);

    statmentCall.execute();

    //获取出参

    Integer note_id = statmentCall.getInt(10);

    Integer send_id = statmentCall.getInt(11);

    if (note_id != null && send_id != null && note_id.intValue() > 0 && note_id.intValue() == send_id.intValue()) {

    response.setErrorNo(0);

    response.setErrorInfo("新增成功");

    return;

    } else {

    response.setErrorNo(-1);

    response.setErrorInfo("新增失败");

    log.warn("491722 rollback 新增失败");

    return;

    }

    二、java调用Funtion

    2.1 新建Funtion

    oracle 的function 语法格式和存储过程类似,如下:

    return number:表明函数返回值为整型。可以看出 ,该函数正常结束时返回值为0,异常退出时返回-1。

    r_cur:游标类型出参。返回的具体结果可以放在这里面。通过OPEN FOR关键字来赋值。

    create or replace function fun_user_visit_add(i_login_user_id IN NUMBER, -- 登录id | 发送人id

    i_receive_user_id IN VARCHAR2, -- 接收人id,多个id之间用英文逗号隔开

    i_work_content IN VARCHAR2, -- 主要事宜

    i_respondent IN VARCHAR2, -- 拜访对象

    i_visit_type IN VARCHAR2, -- 拜访方式:0其他,1当面,2电话,3聊天软件

    i_work_result IN VARCHAR2, -- 拜访结果

    i_remark IN VARCHAR2, -- 备注

    i_id_for_save IN VARCHAR2, -- 剔除重复的发送人id后的值,用来存储到send表中

    r_cur OUT cjtype.t_cursor) -- 出參

    return number

    is

    v_seq_id NUMBER;

    midstr varchar2(400);

    midint number;

    log_func_no number; --功能号

    log_sp_name varchar2(4000); --sp名称

    log_table_name varchar2(4000); --操作的表

    begin

    --日志记录相关变量

    log_func_no := 'xxxxxx';

    log_sp_name := '';

    log_table_name := 'T_WEEK_VISIT_DETAIL,T_WEEK_REPORT_SEND';

    ----业务操作区域------------------------------------------------------------

    -- 拿出序列id

    SELECT SEQ_WORK_REPORT_ID.nextval INTO v_seq_id FROM dual;

    -- 插入主表

    INSERT INTO T_WEEK_VISIT_DETAIL

    (ID,

    LOGIN_USER_ID,

    RECEIVE_USER_ID,

    WORK_CONTENT,

    RESPONDENT,

    VISIT_TYPE,

    WORK_RESULT,

    REMARK)

    VALUES

    (v_seq_id,

    i_login_user_id,

    i_receive_user_id,

    i_work_content,

    i_respondent,

    i_visit_type,

    i_work_result,

    i_remark);

    -- 插入关联表

    INSERT INTO T_WEEK_REPORT_SEND

    (ID, LOGIN_USER_ID, OPTION_TYPE, SEND_TYPE)

    SELECT v_seq_id AS ID,

    to_number(tmp.column_value) AS LOGIN_USER_ID,

    3 AS OPTION_TYPE,

    decode(to_number(tmp.column_value), i_login_user_id, 1, 2) AS SEND_TYPE

    FROM (SELECT column_value FROM TABLE(fn_split(i_id_for_save, ','))) tmp;

    COMMIT;

    -- 返回结果

    open r_cur for

    select v_seq_id as seq_id from dual;

    return 0;

    exception

    when others then

    midstr := sqlerrm;

    midint := sqlcode;

    --必须回滚

    rollback;

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

    -------- 日志记录区 --------

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

    open r_cur for

    select -1 as error_no, log_func_no || ':' || midstr as error_info

    from dual;

    return - 1;

    end fun_user_visit_add;

    2.2 java调用Function

    java.sql.Connection conn = context.getDBService().getDBConnection(dbName);//获取对应数据库连接池

    //入参

    CallableStatement statmentCall = conn.prepareCall("{? = call fun_user_outside_add(?,?,?,?,?,?,?,?)}");

    statmentCall.registerOutParameter(1, OracleTypes.NUMBER);

    statmentCall.setInt(2, Integer.valueOf(login_user_id));

    statmentCall.setString(3, receive_user_id);

    statmentCall.setString(4, work_content);

    statmentCall.setString(5, start_date);

    statmentCall.setString(6, end_date);

    statmentCall.setString(7, remark);

    if (receive_user_id.contains(login_user_id)) {//剔除接收人是自己的记录

    statmentCall.setString(8, receive_user_id);

    } else {

    statmentCall.setString(8, login_user_id + "," + receive_user_id);

    }

    //出参

    statmentCall.registerOutParameter(9, OracleTypes.CURSOR);

    statmentCall.execute();

    //获取出参

    int ret = statmentCall.getInt(1);

    if (ret < 0) {

    response.setErrorNo(-1);

    response.setErrorInfo("新增失败");

    log.warn("491724 新增失败");

    return;

    } else {

    response.setErrorNo(0);

    response.setErrorInfo("新增成功");

    ResultSet resultSet = (ResultSet) statmentCall.getObject(9);

    if (resultSet.next()) {

    int r_seq_id = resultSet.getInt("seq_id");

    // 获取值后 do something...

    }

    return;

    }

    展开全文
  • (一)存储过程(procedure)对于PLSql程序的使用,如果每次使用都要进行编写,会非常的麻烦,这时可以采用过程函数来命名PLSQL程序,被编译后存储到数据库中,以备后续使用。过程函数统称为PL/SQL子程序,他们是被...

    (一)存储过程(procedure)

    对于PLSql程序的使用,如果每次使用都要进行编写,会非常的麻烦,这时可以采用过程和函数来命名PLSQL程序,被编译后存储到数据库中,以备后续使用。

    过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。

    在编译存储过程报错时,可以使用show  error命令查看具体错误原因。

    (二)存储过程格式

    create or replace procedure存储过程名(

    para1varchar2,

    para2 outvarchar2,

    para3in out varchar2)as|is //is与as一样的作用v_namevarchar2(20);beginv_name :='zhangsf';

    para3 :=v_name;

    dbms_output.put_line('para3:'||para3);

    end;

    b7fc7ec0e4687f382ba3288d1a445b5a.png

    上面就是一个最简单的存储过程。一个存储过程大体分为这么几个部分:

    1、创建语句:create or replace procedure 存储过程名

    如果没有or replace语句,则仅仅是新建一个存储过程。如果系统存在该存储过程,则会报错。Create or replace procedure 如果系统中没有此存储过程就新建一个,如果系统中有此存储过程则把原来删除掉,重新创建一个存储过程。

    2、存储过程名定义:包括存储过程名和参数列表。

    参数名和参数类型。参数名不能重复, 参数传递方式:IN, OUT, IN OUT

    IN 表示输入参数,按值传递方式。

    OUT 表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果,供外部调用者使用。

    IN OUT 即可作输入参数,也可作输出参数。

    参数的数据类型只需要指明类型名即可,不需要指定宽度。

    参数的宽度由外部调用者决定。

    过程可以有参数,也可以没有参数

    3、变量声明块:紧跟着的as (is )关键字,可以理解为pl/sql的declare关键字,用于声明变量。

    变量声明块用于声明该存储过程需要用到的变量,它的作用域为该存储过程。另外这里声明的变量必须指定宽度。遵循PL/SQL的变量声明规范。

    4、过程语句块:从begin 关键字开始为过程的语句块。存储过程的具体逻辑在这里来实现。

    5、异常处理块:关键字为exception ,为处理语句产生的异常。该部分为可选

    6、结束块:由end关键字结果。

    7、一般,只有在确认function_name函数是新函数或是要更新的函数时,才使用OR REPALCE关键字,否则容易删除有用的函数。

    8、IN,OUT,IN OUT是形参的模式。若省略,则为IN模式。IN模式的形参只能将实参传递给形参,进入函数内部,但只能读不能写,函数返回时实参的值不变。OUT模式的形参会忽略调用时的实参值(或说该形参的初始值总是NULL),但在函数内部可以被读或写,函数返回时形参的值会赋予给实参。IN OUT具有前两种模式的特性,即调用时,实参的值总是传递给形参,结束时,形参的值传递给实参。调用时,对于IN模式的实参可以是常量或变量,但对于OUT和IN OUT模式的实参必须是变量。

    (三)执行存储过程、函数

    exec   存储过程名(函数);

    或者

    begin

    存储过程名;

    end;

    (四)函数(与存储过程类似)

    CREATE[OR REPLACE]FUNCTIONfunction_name

    (arg1[{ IN | OUT | IN OUT }]type1[DEFAULT value1],[arg2 [ { IN | OUT | IN OUT }]type2[DEFAULT value1]],

    ......[argn [ { IN | OUT | IN OUT }]typen[DEFAULT valuen]])[AUTHID DEFINER | CURRENT_USER]RETURNreturn_typeIS|ASBEGIN执行部分RETURNexpression

    EXCEPTION

    异常处理部分END;

    (五)实例

    create or replace procedure p

    is

    cursor c

    is

    select * from emp2 for update;

    begin

    for v_temp in c loop

    if (v_temp.deptno = 10) then

    update emp2 set sal = sal + 10 where current of c;

    elsif (v_temp.deptno = 20) then

    update emp2 set sal = sal + 20 where current of c;

    else

    update emp2 set sal = sal + 50 where current of c;

    end if;

    end loop;

    commit;

    end;

    --执行

    exec p;

    begin;

    p;

    end;

    --带参数的存储过程

    create or replace procedure p

    (v_a in number, v_b number, v_ret out number, v_temp in out number)

    is

    begin

    if (v_a > v_b) then

    v_ret := v_a;

    else

    v_ret := v_b;

    end if;

    v_temp := v_temp + 1;

    end;

    --实验

    declare

    v_a number := 3;

    v_b number := 4;

    v_ret number;    //用来保存函数的输出结果,供调用者使用

    v_temp number := 5;

    begin

    p(v_a, v_b, v_ret, v_temp); //直接调用函数并出入参数

    dbms_output.put_line(v_ret);

    dbms_output.put_line(v_temp);

    end;

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

    --函数

    create or replace function sal_tax

    (v_sal number)

    return number

    is

    begin

    if (v_sal < 2000) then

    return 0.10;

    elsif (v_sal < 2750) then

    return 0.15;

    else

    return 0.20;

    end if;

    end;

    --查询oracle中的存储过程:

    方法一:select * from user_procedures;方法二:select object_name,object_type,procedure_name from dba_procedures where object_type='PROCEDURE' and owner='SCOTT';

    select  name from user_source where  type='PROCEDURE';

    或者:

    select object_name from user_procedures;

    或者:

    select object_name from user_objects where object_type='PROCEDURE' ;

    ②找到你所要查询的存储过程名字后,执行下面操作,可以看到存错过程内容:

    select  text from user_source where name ='xxxx';--(xxxx代表所要查询的存储过程名字)

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

    如果是函数,类似的方法,只需要把PROCEDURE,换成FUNCTION即可

    删除存储过程和函数

    drop  procedure   存储过程名;

    drop  function   函数名;

    展开全文
  • 文章目录1 概述2 语法3 空参的存储过程4 带in模式的存储过程5 带out模式...CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SOL语句) END 注意: 1、参数列表包含三部分 参数模式 参数名 参数类型
  • 5、注意: 函数体中仅有一句话,则可以省略begin end 使用delimiter 语句设置结束标记 6、函数和存储过程的区别 关键字 调用语法 返回值 应用场景 函数 FUNCTION SELECT 函数() 只能是一个 一般用于查询结果为一个...
  • 编译过程:alter procedure New_procedure complile;...编译函数:alter function New_function compile;为了能够执行,需要拥有此函数,或者具有alter any procedure系统权限。编译包:later package [user.]...
  • 删除均使用 drop ,drop procedure/function 名称; 执行均可使用exec 或者begin 名称 end; 在编译存储过程报错时,可以使用show error命令查看具体错误原因 存储过程 范例: create or replace procedure.
  • 1.创建过程SP_STUDENT2.在SQLPlus中调用过程SP_STUDENT3.在VS程序中调用过程SP_STUDENT4.创建函数FN_ADDONE5.调用函数FN_ADDONE6.删除函数FN_ADDONE============================1.创建过程SP_STUDENT--------------...
  • function_procedure函数mysql内置的函数很好用,同样mysql也支持用户自定义函数1.为避免和函数中的语句结束符;冲突,将语句结束符号临时重定义为$$delimiter $$2.书写函数体语法create function 函数名(参数列表) ...
  • Mysql高级之存储过程原文:Mysql高级之存储过程概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来...陈2014-11-14657浏览量Mysql函数(function)|存储过程(procedure)func...
  • 函数mysql内置的函数很好用,同样mysql也支持用户自定义...书写函数体语法createfunction函数名(参数列表)returns返回值类型begindeclare变量名变量类型;逻辑语句;return返回值;end$$示例createfunctionnum_add()re...
  • 1.Navicat运行函数输入参数时,什么都不填和填NULL是不一样的,具体可以通过Print打印,或者自己去尝试. (1)比如执行如下的语句,什么都不输入: PRINT('nChannelAddr') //注意打印字符串要用单引号. PRINT(@...
  • 查看MySQL中的存储过程/函数定义(View stored procedure/function definition in MySQL)什么是MySQL命令来查看存储过程函数的定义,类似于Microsoft SQL Server中的sp_helptext ?我知道SHOW PROCEDURE STATUS将...
  • CREATE[DEFINER = user]PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_bodyCREATE[DEFINER = user]FUNCTION sp_name ([func_parameter[,...]])RETURNS type[characteristic ...] routine...
  • 昨天下午和今天上午找了也看了很多资料,现在基本上已经把二者的区别...存储过程(procedure)不直接返回数据,但可以改变输出参数的值,这可以近似看作能返回值,且存储过程输出参数的值个数没有限制。从一般应用上来...
  • 昨天使用exp可以导出oracle数据库表,今天说下怎么导出存储过程。首先看下使用pl/sql怎么导出...选择存储过程(Procedure,Function,Trigger,Type,Type Body,Package)等-->在Output File选择导出位置-->Export ...
  • Oracle中的函数过程

    2021-05-01 05:50:06
    任何人都能解释一下Oracle中函数过程之间的主要区别是什么? 如果我能用功能做所有事情,为什么我必须使用程序?如果我不能在sql语句中调用过程,那么,我会编写一个函数来做同样的工作。程序不返回值,好吧,我会...
  • 函数Function)是在数据库中用PL/SQL语言编写的代码对象,被其他代码调用运行,可传入多个参数,返回一个返回值。因为其为代码对象,几乎不占用存储空间。 6.5.5.2 创建、使用及删除 1)创建 语法 create or ...
  • Mysql-函数过程

    2021-01-19 19:04:22
    mysql的函数(function)和过程(procedure) 在维护mysql和procedure中总会遇到需要有些无法通过简单的sql完成的需求,一般会想到sql脚本完成。这时候就会遇到sql函数过程函数过程很像,在官方文档里也是放在...
  • 存储过程和存储函数 MySQL中提供存储过程与存储函数机制,我们先将其统称为存储程序,一般的SQL语句需要先编译然后执行,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储...
  • procedure and function

    2021-03-05 16:08:07
    概念 procedure程序 举例 声明 设置 delimiter结束标志 后,以后的结束标志都要用该结束标志,而不是; out变量调用可以不用创建: 删除 查看
  • Oracle的procedure,package,function package包括包头和包体,主要区别就是包体多了个body,包头里面需要声明procedure(声明时,可以写in和out参数,in代表输入,即需要读入的数据,被用于存储过程中使用,out...
  • 创建存储过程:语法:...调用 存储过程的方式 两种1、execute(exec) ------exec 函数名()2、begin函数名()end -------begin 函数名()end函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数过程的...
  • mysql functionprocedure

    2021-01-18 23:22:06
    Mysql 的 functionprocedure 有啥区别呢 ? 网上搜索后说 function 有返回值, procedure 无返回值。1.return从function 的语法角度来说确实如此, function 的定义中有 return 一项,如下所示procedure:DROP ...
  • END 以上所述是小编给大家介绍的MySQL 5.7 create VIEW or FUNCTION or PROCEDURE,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
  • 语法:创建存储过程:CREATE[definer = {user|current_user}]PROCEDUREsp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body其中:proc_parameter : [IN|OUT|INOUT] parameter_name ...
  • 2、存储过程声明用 PROCEDURE函数FUNCTION。 3、存储过程不需要返回类型,函数必须要返回类型。 4、存储过程可作为独立的plsql执行,函数不能做独立的plsql执行,必须做为表达的一部分。 5、 存储过程只能...
  • 存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。函数Mysql中函数有两种:系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,416
精华内容 27,766
关键字:

procedure函数过程function