精华内容
下载资源
问答
  • SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来...数据库的存储过程可...
    c75e75a1200092e5d179284921e86199.png

    SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。

    推荐课程:MySql教程。

    存储过程的优点:

    (1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

    (2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

    (3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

    (4).减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。

    (5).作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

    MySQL的存储过程

    存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

    MySQL存储过程的创建

    语法

    CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体

    DELIMITER //

    CREATE PROCEDURE myproc(OUT s int)

    BEGIN

    SELECT COUNT(*) INTO s FROM students;

    END

    //

    DELIMITER ;

    分隔符

    MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

    参数

    存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用

    展开全文
  • 概述虽然现在存储过程相对比较少用了,但是平时接触不可避免的要跟存储过程打...点击要调试的存储过程,右键选择TEST如果需要查看变量,当然调试都需要。在右键菜单中选择Add debug information.start debugger(F...

    概述

    虽然现在存储过程相对比较少用了,但是平时接触不可避免的要跟存储过程打交道,当需要自己写的时候总会碰到这或那的错误,这个时候一般要怎么调试呢?


    PL/SQL调试

    PL/SQL中提供了【调试存储过程】的功能,可以完成存储过程的预编译与测试。

    1. 点击要调试的存储过程,右键选择TEST
    2. 如果需要查看变量,当然调试都需要。在右键菜单中选择Add debug information.
    3. start debugger(F9)开始我们的测试,Run(Ctrl+R)
    4. 随时在varible List中输入我们想查看的变量

    其它:

    Step into(Ctrl+N):单步调试,进入下一步

    Step over(Ctrl+O):结束该语句

    Step out(Ctrl+T):跳出该过程

    Run to next exception:进入下一个断点Breakpoint

    Toggle Breakpoint设置断点:光标指向一行,Ctrl+B;或鼠标点中该行的行号边缘


    实验--调试存储过程

    1、在要调试的过程上单击 test ,如下图所示:

    02d25149f0bd39889414069741acb76d.png

    2、单击“Test”后,PLSQL会打开调试界面,图中位置1的按钮就是开始调试的按钮,在调试之前要填写存过的参数,位置2就是填写参数的地方,如果有多个参数,会有多行参数框,按参数名填写相应的参数即可。

    1127ccafcad9fa7b2c5852289b64fcc5.png

    3、填写完参数,单击开始调试按钮后,调试的界面会发生一些变化。图中位置1的变化,说明存过已经处于执行状态,别人不能再编译或者执行。位置2的按钮就是执行按钮,单击这个按钮存过会执行完成或者遇到bug跳出,否则是不会停下来的,调试时不会用这个按钮的。位置3的按钮才是关键——单步执行,就是让代码一行一行的执行,位置4的按钮是跳出单步执行,等待下一个指令。

    489349bf3a15e5eb9d4a57a347f4612d.png

    4、单击“单步执行”,存过开始单步执行。界面中每一次执行的代码会高亮显示(图中位置1),如果想要看某个变量具体的值,就在位置2的地方输入该变量名,然后变量的值会显示在位置3的地方。

    8e013bc326f5dcfeaa63465eae622fc5.png

    5、调试的时候,每一次单步执行的时候要记一下执行代码的行数,图中位置3的数字就是当前执行代码的行数,就是第几行。如果过程单步执行到某行后,再单步执行的时候,存过就退出,那么错误就在该行的下一行。

    ba6e21456ea9a2916f1ff0cb994eb7d8.png

    6、代码执行到24行,在往下执行时,直接转到exception的地方,也就是异常处理的部分。

    787902da08261d4d6cfdd7a6feb0a49a.png

    7、这说明我们代码中的错误在24和25行上,我们打开存过,浏览到24行和25行附近,发现25行和24行使用了两个变量,记住那两个变量。重新开始调试过程。

    277bffa47e9961b138cf0c1badec5503.png

    8、单步的执行时候把刚才那两个变量名填写到变量查看框,一边观察变量值变化,一边单步执行,执行到24行的时候,发现一个变量已经有值了,而另一个变量的值为null。错误原因明朗了吧?就是变量没有赋值或者初始话,给该变量赋值后存过就不报错了。

    f24f683ea1e38578f847e765c7d52339.png

    看完一定要去实践下,几分钟时间就可以掌握了。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

    74f3f52e66044d90c18fce6adb936f99.gif
    展开全文
  • 概述虽然现在存储过程相对比较少用了,但是平时接触不可避免的要跟存储过程打...点击要调试的存储过程,右键选择TEST如果需要查看变量,当然调试都需要。在右键菜单中选择Add debug information.start debugger(F...

    概述

    虽然现在存储过程相对比较少用了,但是平时接触不可避免的要跟存储过程打交道,当需要自己写的时候总会碰到这或那的错误,这个时候一般要怎么调试呢?


    PL/SQL调试

    PL/SQL中提供了【调试存储过程】的功能,可以完成存储过程的预编译与测试。

    1. 点击要调试的存储过程,右键选择TEST
    2. 如果需要查看变量,当然调试都需要。在右键菜单中选择Add debug information.
    3. start debugger(F9)开始我们的测试,Run(Ctrl+R)
    4. 随时在varible List中输入我们想查看的变量

    其它:

    Step into(Ctrl+N):单步调试,进入下一步

    Step over(Ctrl+O):结束该语句

    Step out(Ctrl+T):跳出该过程

    Run to next exception:进入下一个断点Breakpoint

    Toggle Breakpoint设置断点:光标指向一行,Ctrl+B;或鼠标点中该行的行号边缘


    实验--调试存储过程

    1、在要调试的过程上单击 test ,如下图所示:

    7390a7869d629502dae9f6db7ef4dd79.png

    2、单击“Test”后,PLSQL会打开调试界面,图中位置1的按钮就是开始调试的按钮,在调试之前要填写存过的参数,位置2就是填写参数的地方,如果有多个参数,会有多行参数框,按参数名填写相应的参数即可。

    168f2c8a6c359d366101596344df032c.png

    3、填写完参数,单击开始调试按钮后,调试的界面会发生一些变化。图中位置1的变化,说明存过已经处于执行状态,别人不能再编译或者执行。位置2的按钮就是执行按钮,单击这个按钮存过会执行完成或者遇到bug跳出,否则是不会停下来的,调试时不会用这个按钮的。位置3的按钮才是关键——单步执行,就是让代码一行一行的执行,位置4的按钮是跳出单步执行,等待下一个指令。

    bacc8bac806a3516cc4c301bf91f8c5d.png

    4、单击“单步执行”,存过开始单步执行。界面中每一次执行的代码会高亮显示(图中位置1),如果想要看某个变量具体的值,就在位置2的地方输入该变量名,然后变量的值会显示在位置3的地方。

    6752aa3de53f9a1274754f22987a6634.png

    5、调试的时候,每一次单步执行的时候要记一下执行代码的行数,图中位置3的数字就是当前执行代码的行数,就是第几行。如果过程单步执行到某行后,再单步执行的时候,存过就退出,那么错误就在该行的下一行。

    00ce4d47d649678bccc8452d6897ae68.png

    6、代码执行到24行,在往下执行时,直接转到exception的地方,也就是异常处理的部分。

    c2570457535ba719598662f6876e60c9.png

    7、这说明我们代码中的错误在24和25行上,我们打开存过,浏览到24行和25行附近,发现25行和24行使用了两个变量,记住那两个变量。重新开始调试过程。

    fd799b41eeaf6e5692ca003a244fbb16.png

    8、单步的执行时候把刚才那两个变量名填写到变量查看框,一边观察变量值变化,一边单步执行,执行到24行的时候,发现一个变量已经有值了,而另一个变量的值为null。错误原因明朗了吧?就是变量没有赋值或者初始话,给该变量赋值后存过就不报错了。

    f33669dbaf1f858df190e95aabcd3ae8.png

    看完一定要去实践下,几分钟时间就可以掌握了。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

    9d95eeefd8cd860ca0c0eae3e94b99ef.gif
    展开全文
  • 存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。估计用户也是因为这个禁止使用存储过程了。一个方案是:用 JAVA 硬...

    存储过程没法移植,差不多都要重新了。既然重写,还不如从根本上解决移植问题。

    原来存储过程是“不得不用”,因为前端的报表工具不具备复杂计算能力,而为报表准备数据的逻辑又很复杂,用存储过程方便些。

    但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。估计用户也是因为这个禁止使用存储过程了。

    一个方案是:用 JAVA 硬编码来做复杂计算,然后给报表做呈现;但这种做法的复杂度太高了,对于报表开发来说就要很多高级程序员参与才行,不太划算。

    比较好的选择是使用带脚本计算能力的报表工具,在报表里就直接搞定原来存储过程的那些计算(库外存储过程),而且相对简单,原来的报表开发人员就都能搞定。

    画了一个简图,可以感受一下:

    91c60caded2eafe3c0eae2144b00f32a.png

    新型报表应用结构中,存储过程挪到库外做了以后,数据库还是要承担一点计算任务的,比如过滤、分组之类,主要是为了减少取数的 IO 消耗。

    另外,新结构的库外“存储过程”支持异构库或外部数据混合计算,比原来数据库的存储过程功能还扩展了;重要的是解决了报表应用和数据库的紧耦合,以后应用可以任意扩展,数据库更换也不怕了。

    这里详细介绍了带脚本计算能力的报表工具如何完成库外存储过程,供参考: 怎样减少报表开发中对存储过程的依赖

    展开全文
  • 在此背景下,我想到了一个比较方便、节省成本方法与大家分享,就是维护一个注释表,然后编写一个存储过程存储过程中自动拼成一条一条comment sql语句,然后利用游标去循环执行,效率非常高,而且维护起来也...
  • 在我们好一个按日期统计数据的存储过程后,多天的数据我们该怎么去调用存储过程呢?常用的一种方法就是再一个存储过程,该过程的参数为起始日期和终止日期两个,然后起始日期累加,直到终止日期。具体如下: ...
  • (备注 这个表是 从企业库自带 sqlserver 中翻译过来,在网上查了一下 好像还可以 自定义表 ,但是不知道怎么弄,希望后来朋友 继续研究一下) create table ORACLE_ENTLOG( ID NUMBER, EVENTID...
  • 要求将给定表数据转换成SQL语言Insert语句,表结构转换成SQL语言Create Table语句,并保存在文件中。该过程以要导出表名和保存SQL语句文件名为参数。 请问有大佬能说一下该怎么做吗?或者给个思路
  • 存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。估计用户也是因为这个禁止使用存储过程了。 一个方案是:用 JAVA ...
  • 关键词: MySQL Oracle PostgresQL JAVA 存储过程 报表 报表工具 数据分析 迁移存储过程没法移植,...但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表...
  • SQL语句在执行的时候是先编译再执行,在大型数据库中为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后, 存储在数据库服务器中,用户通过指定存储... 有什么优势 oracle怎么写存储过程 oracle的存储过...
  • 其次,升级存储过程时需要数据库的写权限,容易对数据安全造成影响。另外,由于SQL固有的一些问题(数据无序,缺乏集合,无法引用,分步不彻底,等等),进行存储过程的编程也比较困难。这主要是因为报表数据的...
  • 概述最近接触了物流数据库这一块,OLAP类型系统,有好多存储过程后面需要去做优化,因为写存储过程中会遇到存储过程执行时间太长问题,如果能知道存储过程里面具体执行情况是如何就可以帮助我们进一步分析。...
  • CREATE OR REPLACE PACKAGE "TEST_PACKAGE" is type MYCURSOR is ref cursor; end TEST_PACKAGE; ...create or replace procedure TEST_PRO( ...上面我的一个简单的存储过程,请问这个怎么调用? 数据库怎么调用
  • 问题1:oracle数据库怎么找出表中某字段那些记录有乱码?用sql语句或其他方法解决能行吗? 回答: 没有自带方法, 不过你自己可以存储过程,方法之类。 1,用游标检索。 2,检查每个字段是数字, 字母...
  • 以前做开发都是直接SQL语句,最近这个工程领导要求凡是跟数据库交互都要...现在告诉大家在Java类中怎么调用存储过程,我用Oracle数据库,先建好存储过程,然后建一个类package com.rj.service;import java.sql.*...
  • 概述最近接触了物流数据库这一块,OLAP类型系统,有好多存储过程后面需要去做优化,因为写存储过程中会遇到存储过程执行时间太长问题,如果能知道存储过程里面具体执行情况是如何就可以帮助我们进一步分析。...
  • <br />Oracle数据库中临时表进一步深入研究    最近考虑到我们数据库端写存储过程关于临时表使用情况,由于我们现在还不清楚数据库端到底是怎么处理?是否和SQL Server处理方式相同,...
  • oracle存储过程

    2009-09-24 16:45:17
    数据库一张表上加了一个字段,写一个存储过程,给原来每条记录以递增数据更新给刚加这一个字段,存储过程怎么写啊? create table TBL_INFO ( SQH CHAR(13) not null, DORDER NUMBER ) create...
  • 概述最近接触了物流数据库这一块,OLAP类型系统,有好多存储过程后面需要去做优化,因为写存储过程中会遇到存储过程执行时间太长问题,如果能知道存储过程里面具体执行情况是如何就可以帮助我们进一步分析。...
  • 怎么利用MyBatis传List类型...都将逻辑在存储中又是及其头疼一件事(参数长度也有限制),那么我想是将参数在后台封装为单个或多个list集合,直接通过MyBatis将此参数传到数据库存储过程中,一来摆脱了MyBatis批...
  • 由于数据量比较大,所以执行一条SQL语句可能死住,数据库话,就会将当前的数据库进程锁住,而就执行这样一条SQL语句就死住,select * from ac20,这个表里面数据量达到了2亿3千万条数据,所以,写存储过程的时候,...
  • 一直都没Oracle的存储过程,今天突然来了一个需求:计算指定日期的前N个工作日或者后N个工作日日期(去除周末,法定节假日无一直都没Oracle的存储过程,,今天突然来了一个需求:计算指定日期的前N个工作日...
  • 很快有人说用plsql存储过程,后来我又问纯粹用sql行不行,有个牛人很快回答了:Well if you have a thoretical maximum, which I would assume you would given the legibility of listing hundreds of ...
  • 概述最近接触了物流数据库这一块,OLAP类型系统,有好多存储过程后面需要去做优化,因为写存储过程中会遇到存储过程执行时间太长问题,如果能知道存储过程里面具体执行情况是如何就可以帮助我们进一步分析。...
  • 以前做开发都是直接SQL语句,最近这个工程领导要求凡是跟数据库交互都要...现在告诉大家在Java类中怎么调用存储过程,我用Oracle数据库,先建好存储过程,然后建一个类package com.rj.service;import java.sql.*...
  • Oracle 批量建函数 存储过程 脚本

    千次阅读 2014-12-15 16:38:41
    这段时间开始使用oracle 10G 数据库,前几天了几个报表函数 和存储过程,然后 把生成脚本去 正式库上执行 ,老是报错,不知道是怎么回事, 可能是 SQLserver 用惯了 ,总觉得可以连续执行多个 建函数 脚本...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 154
精华内容 61
关键字:

oracle数据库的存储过程怎么写