精华内容
下载资源
问答
  • ORACLE存储过程创建和调用

    万次阅读 2018-07-23 11:09:17
    创建和调用存储过程这里就不写了,给一个觉得不错的文章地址:https://www.cnblogs.com/chinafine/articles/1776094.html 主要总结下遇到个几个问题: 1、在业务代码执行时,赋值给一个变量,需要使用:=,而不是=...

    因为项目数据处理需要,这几天,在研究存储过程。遇到下面的好几个坑,写下来总结一下,方便自己以后查看。创建和调用存储过程这里就不写了,给一个觉得不错的文章地址:https://www.cnblogs.com/chinafine/articles/1776094.html

    主要总结下遇到个几个问题:

    1、在业务代码执行时,赋值给一个变量,需要使用:=,而不是=;

    2、在plsql中执行完创建语句,调用报错

    解决办法:

    右键编辑存储过程,在控制台中可以看到报错信息,点击错误信息,可以看到出错代码被标红

    3、在查询资料时,发现有人用is代替as来写,在这里总结一下在ORACLE中存储过程的通用模板:

          create or replace procedureName/(name in out vachar,age in varchar)----需要传参时,加上斜杠后代码

                   is/as----这里is,as都可以,后面还可以声明变量,如:as  resultCount number

          begin

                   ----这里写sql业务代码,常用的处理方法if  then-else-end if;

          exception

                   ----这里写异常处理信息,常用处理方法when  then---when others then---end;

                   when too_many_rows then

                   DBMS_OUTPUT.PUT_LINE('返回值多于1行');

                   when others then

                   DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');

          end;

    4、执行存储过程方法:

          declare
                      realgasoffername varchar2(255);----注意一下,参数类型需要和数据库一致
          begin
                      realgasoffername:='test';----参数赋值
                      runbyparmeters();---调用存储过程
                      DBMS_OUTPUT.PUT_LINE(REALGASOFFERNAME||' hahaha  '||'lalala');
          end;

    5、常用的存储过程sql:

          ----ORACLE根据名称一行行显示存储过程
          select  text  from  user_source  where name  =  'runbyparmeters'  order  by  line;

          ---=查询当前用户的存储过程
          select  *  from  user_objects  where  object_type  =  'PROCEDURE';

     

     

     

     

     

     

     

    展开全文
  • Oracle 存储过程、函数的创建和调用

    千次阅读 2018-12-15 22:20:52
    一、Oracle 创建和调用存储过程 1、基本语法 create or replace procedure update_emp_sal (Name in out type, Name in out type, ... ) is begin end update_emp_sal; 可能不了解 in 参数, Oracle 过程中定义...

    一、Oracle 创建和调用存储过程

    1、基本语法

    create or replace procedure update_emp_sal
    (Name in out type,
     Name in out type, ...
    ) is
    begin
      
    end update_emp_sal;
    

    可能不了解 in out 参数,
    Oracle 过程中定义了 in / out / in out 三种参数模式。
    (1)in 就是传入但存储过程里面处理的参数,传进去供查询语句使用。
    (2)out 参数就是返回值的参数。返回查询的结果集。
    (3)in out 输入输出模式:能接收传入的实参值;在子程序内部可以修改; 可以输出(必须用实参变量调用)

    in 参数就像 c++ 语言里函数一般的参数那样,而 out 函数就像 c++ 里函数的引用类型参数一样,不知道我比喻是否正确,请高手指点。

    如果不知道参数类型,可以参考:

    create or replace procedure DEPT_AVG_SAL(p_deptno emp.dept_id%TYPE)
    as v_sal emp.salary%TYPE;
    
    begin
          Select avg(salary)  into v_sal
          from emp
        where dept_id = p_deptno;
          dbms_output.put_line(p_deptno || ' : ' || 'average salary is:' || v_sal);
    
    end DEPT_AVG_SAL;
    

    2、写一个简单的例子修改 emp 表的 ename 字段:

    create or replace procedure update_emp
    (
    v_empno  varchar2,
    v_ename  varchar2
    ) is
    begin
    
    update emp set ename=v_ename where empno=v_empno;  
    
    end update_emp;
    

    调用方法如下:

    SQL>exec  update_emp('7935','test');
    

    2、有返回值的存储过程

    就写一个简单的返回 empno=7935 的 sal 值

    create or replace procedure emp_out_sal
     (
     v_empno in varchar2,
     v_sal out number
     ) is
     vsal number(7,2);
     begin
     
     select sal into vsal from emp where empno=v_empno;
     v_sal:=vsal;
     end;
    

    调用有返回值的过程方法(1)

    SQL> var vsal number
    SQL> exec emp_out_sal('7935',:vsal);
    
    PL/SQL procedure successfully completed
    vsal
    

    调用有返回值的过程方法(2)

    SQL> var vsal number
    SQL> call emp_out_sal('7935',:vsal);
    
    Method called
    vsal
    

    二、Oracle 创建和调用函数(function)

    1、基本语法规则如下:

    create or replace function (Name in type, Name in type, ...) return number is
      Result number;
    begin
      
      return (Result);
    end ;
    

    2、写一个简单的查询例子查询出 empno=7935 的 sal 值

    create or replace function ret_emp_sal(v_ename varchar2)
    return number
    is
    v_sal number(7,2);
    begin
    select nvl(sal,0) into v_sal from emp where lower(ename)=lower(v_ename);
    return v_sal;
    end;
    

    调用此函数:

    SQL> var vsla number
    SQL> call ret_emp_sal('7935') into :vsal;
    
    Method called
    vsal
    
    展开全文
  • 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。优点存储过程...

    MySQL 5.0 版本开始支持存储过程。

    存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

    存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

    存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

    优点

    存储过程可封装,并隐藏复杂的商业逻辑。

    存储过程可以回传值,并可以接受参数。

    存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。

    存储过程可以用在数据检验,强制实行商业逻辑等。

    缺点

    存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。

    存储过程的性能调校与撰写,受限于各种数据库系统。

    存储过程的创建和调用

    创建存储过程

    CREATE

    [DEFINER = { user | CURRENT_USER }]

    PROCEDURE sp_name ([proc_parameter[,...]])

    [characteristic ...] routine_body

    proc_parameter:

    [ IN | OUT | INOUT ] param_name type

    characteristic:

    COMMENT 'string'

    | LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    routine_body:

    Valid SQL routine statement

    [begin_label:] BEGIN

    [statement_list]

    ……

    END [end_label]

    MYSQL 存储过程中的关键语法

    1.声明语句结束符,可以自定义:

    DELIMITER $$

    DELIMITER //

    2.声明存储过程:

    CREATE PROCEDURE demo_in_parameter(IN p_in int)

    3.存储过程开始和结束符号:

    BEGIN .... END

    4.变量赋值:

    SET @p_in=1

    5.变量定义:

    DECLARE l_int int unsigned default 4000000;

    6.创建mysql存储过程、存储函数:

    create procedure 存储过程名(参数)

    7.存储过程体:

    create function 存储函数名(参数)

    实例

    1.创建数据库,备份数据表用于示例操作:

    mysql> create database db1;

    mysql> use db1;

    mysql> create table PLAYERS as select * from TENNIS.PLAYERS;

    mysql> create table MATCHES as select * from TENNIS.MATCHES;

    2.下面是存储过程的例子,删除给定球员参加的所有比赛:

    mysql> delimiter $$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)

    mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)

    -> BEGIN

    -> DELETE FROM MATCHES

    -> WHERE playerno = p_playerno;

    -> END$$

    Query OK, 0 rows affected (0.01 sec)

    mysql> delimiter;#将语句的结束符号恢复为分号

    解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀。 在定义过程时,使用 DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个 $$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。

    调用存储过程:

    call sp_name[(传参)];

    mysql> select * from MATCHES;

    +---------+--------+----------+-----+------+

    | MATCHNO | TEAMNO | PLAYERNO | WON | LOST |

    +---------+--------+----------+-----+------+

    | 1 | 1 | 6 | 3 | 1 |

    | 7 | 1 | 57 | 3 | 0 |

    | 8 | 1 | 8 | 0 | 3 |

    | 9 | 2 | 27 | 3 | 2 |

    | 11 | 2 | 112 | 2 | 3 |

    +---------+--------+----------+-----+------+

    5 rows in set (0.00 sec)

    mysql> call delete_matches(57);

    Query OK, 1 row affected (0.03 sec)

    mysql> select * from MATCHES;

    +---------+--------+----------+-----+------+

    | MATCHNO | TEAMNO | PLAYERNO | WON | LOST |

    +---------+--------+----------+-----+------+

    | 1 | 1 | 6 | 3 | 1 |

    | 8 | 1 | 8 | 0 | 3 |

    | 9 | 2 | 27 | 3 | 2 |

    | 11 | 2 | 112 | 2 | 3 |

    +---------+--------+----------+-----+------+

    4 rows in set (0.00 sec)

    解析:在存储过程中设置了需要传参的变量p_playerno,调用存储过程的时候,通过传参将57赋值给p_playerno,然后进行存储过程里的SQL操作。

    存储过程体

    存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等

    过程体格式:以begin开始,以end结束(可嵌套)

    BEGIN

    BEGIN

    BEGIN

    statements;

    END

    END

    END

    注意:每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫做复合语句compound statement),则不需要分号。

    为语句块贴标签:

    [begin_label:] BEGIN

    [statement_list]

    END [end_label]

    例如:

    label1: BEGIN

    label2: BEGIN

    label3: BEGIN

    statements;

    END label3 ;

    END label2;

    END label1

    标签有两个作用:

    1、增强代码的可读性

    2、在某些语句(例如:leave和iterate语句),需要用到标签

    展开全文
  • 创建存储过程: ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,...
  • 1、简单存储过程创建和调用 //存储过程test1 create PROCEDURE test1() begin//开始 select * from cst_customer;//中间要做的操作 end//结束 //存储过程调用 Call test1() 2、创建带参数的存储过程 create ...

    1、简单存储过程的创建和调用

    //存储过程test1
    create PROCEDURE test1()
    begin//开始 
    select * from cst_customer;//中间要做的操作
    end//结束
    

    //存储过程的调用
    Call test1()

    2、创建带参数的存储过程

    create PROCEDURE test2(IN c_id BIGINT(20))
    begin 
    select * from cst_customer where cust_id = c_id;
    end
    call test2(2)
    

    3、创建输出参数的存储过程

    create PROCEDURE test3(OUT c_name VARCHAR(32))
    BEGIN 
    set c_name = '6666';
    SELECT c_name;
    END
    
    call test3(@c_name)//6666
    

    4、变量

    CREATE PROCEDURE test4()
    BEGIN 
    DECLARE id BIGINT(32) DEFAULT 2;
    SELECT * FROM cst_customer where cust_id = id;
    END
    call test4()
    

    使用存储过程循环插入sql语句

    create PROCEDURE test()
    begin
    DECLARE i bigint;
    set i=2;
    while i<=20 do
    INSERT INTO `audit_record_risk`(`ID`….) VALUES (i,….);
    set i=i+1;
    END while;
    END;
    Call test()
    

    总结:

    1. 如果仅仅想把数据传给MySQL存储过程,那就用in类型参数;
    2. 如果仅仅从MySQL存储过程返回值,那就用out类型参数;
    3. 如果需要把数据传给MySQL存储过程经过计算再传回给我们,那就用inout类型参数。

    查看存储过程;SHOW CREATE PROCEDURE proc_name;
    查看函数:SHOW CREATE FUNCTION func_name;
    删除存储过程:DROP PROCEDURE proc_name;
    删除函数:DROP FUNCTION func_nmae

    展开全文
  • 主要介绍了mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)赋值(SET)操作方法,结合实例形式较为详细的分析了mysql存储过程创建调用及变量创建、赋值具体原理、操作技巧与相关...
  • 存储过程创建调用

    千次阅读 2020-05-21 13:54:47
    存储过程的含义 主要事例 **含义:**存储过程是一个预编译的SQL语句,优点是允许模块化的设计,成功创建后可多次调用。...1:不带参数的存储过程创建和调用创建存储查询数据 create proc cp_select_book.
  • 存储过程是在大型的数据库系统中,为了完成特定功能的SQL语句集合,一次编译好,一直都可以使用,用户通过存储过程的名字,并且给定参数,然后就可以调用执行了。 这个存储过程是在MySQL中存放执行的,也就是说,...
  • 在MySQL 入门教程中,我们能够看到很多关于如何创建储存过程 如何利用 IN OUT 参数调用存储过程的示例。这些示例都很简单,能够很好的帮助你理解 MySQL 中创建带参数存储过程的语法。这些示例已在 MySQL 5.5 中...
  • 基于Oracle 数据库存储过程创建调用-附件资源
  • MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常优秀的持久层框架。接下来通过本文给大家介绍mybatis调用视图和存储过程的方法,感兴趣的朋友一起看看吧
  • MYSQL中存储过程创建调用及语法

    千次阅读 2021-01-18 21:23:50
    MySQL 存储过程是从MySQL 5.0开始增加的新功能。存储过程的优点有一箩筐。不过最主要的还是执行效率SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如PHP),要组织很多SQL...
  • 在数据库中创建存储过程: 1在数据库中根据表建立存储过程(记住存储过程的名字【你自己建的】)后面调用的时候直接call +名字(参数) 二.调用存储过程: dao中:public Double findSalEname(String name); ...
  • 1.编写带输入参数的存储过程proc_St:在查询分析器中创建一个存储过程,要求输入学号姓名-----即要求以学号(@SSno)姓名(@SSname)为存储过程的输入参数(存储过程的参数名必须以@开头,每个参数都应当有数据...
  • 一、存储过程创建和调用 1、声明存储过程: CREATE PROCEDURE demo(IN a int) 2、存储过程开始结束符号: BEGIN … END 3、变量赋值: SET @a=1 4、调用存储过程: call procedure_name[(传参)]; 5、下面...
  • 概念目的 什么是PLSQL PL/SQL(Procedure Language/SQL) PLSQL是Oracle 对sql语言的过程化扩展(类似与Basic) 指在SQL命令语言中增加了过程处理语句(如分支,循环等),使SQL语言具有过程处理能力。 ...
  • 创建存储过程 create or replace procedure procedure_name is .... 调用 execute procedure_name(argument_list); 编译 如果存储过程包含的对象发生改变,可能使存储过程变得无效,这时,需要对存储过程进行重新...
  • 接触到这类问题的人还真不多,大多数的连接池都写好了,谁会去直接构建连接进行操作呢,所以baidu google基本都没有结果,今天回头来解决这个问题,突然就有了突破,找到了一篇文章《对Mysql的C API调用存储过程的...
  •  使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列。不带参数的 call 转义序列的语法如下所示: {call procedure-name}  作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中...
  • 一组预先编译好的SQL语句的集合,可理解成批处理语句,类似于JAVA中的方法。使用时直接调用名字就可以 好处: 1....create Procedure 存储过程名(参数列表) Begin 存储过程体(一组合法的SQL语句) End
  • 触发器调用存储过程

    2017-06-19 09:13:17
    触发器调用存储过程
  • Oracle中创建存储过程和调用过程(一)

    万次阅读 多人点赞 2018-09-25 17:07:05
    1、定义  所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过 ...2、存储过程创建 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。 ...
  • 主要介绍了Node.js中调用mysql存储过程示例,本文在windows环境测试通过,本文一并给出了创建数据库、录入数据、创建存储过程调用存储过程等例子,需要的朋友可以参考下
  • CREATE PROCEDURE sp_add(a int, b int,out c int) begin set c=a+ b; end; 调用过程: call sp_add (1,2,@a); select @a;
  • 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于PostgreSQL自带数组类型,所以有一个自定义函数的入参就是一个int数组,形如: 代码如下:CREATE OR REPLACE FUNCTION “public”.”func_...
  • jdbc 存储过程 java 程序 JDBC 调用存储过程方法
  • 1 创建调用只有输入参数的函数 create or replace function fun_test_1(param1 in number,param2 in number) return number as begin if param1>param2 then return param1; else return param2; end if;
  • Mysql中创建存储和调用存储过程(一)

    千次阅读 2019-01-11 16:37:17
    创建存储过程 DELIMITER $$ --定义分割符 DROP PROCEDURE IF EXISTS getRecord $$ CREATE PROCEDURE getRecord ( IN in_id INTEGER, --定义输入参数 OUT out_name VARCHAR(20), --输出参数 OUT out_age INTEGER) -...
  • 数据库中已创建存储过程user_logon_check, PHP调用示例如下, <?php $dsn = 'mssql:dbname=MyDbName;host=localhost'; $user = 'sa'; $password = '666666'; try { $dbCon = new PDO($dsn, $user, $password...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 871,149
精华内容 348,459
关键字:

存储过程的创建和调用