精华内容
下载资源
问答
  • 之前写过SqlServer的存储过程没接触过MySQL的。开发过程中,一路顺畅,业务数据流转都很正常。等到部署给客户试用时,频繁的出现死锁、事务不回滚的情况。对于大批量的业务数据出错但不回滚,会持续的产生恶性循环。...

    本人在做项目时,遇到了一个异常蛋疼的问题,困扰了很久。

    项目原先的数据库选用的是Oracle,后来到新项目中,换成了MySQL,一些主要的业务操作都是由Procedure来实现完成的。之前写过SqlServer的存储过程没接触过MySQL的。开发过程中,一路顺畅,业务数据流转都很正常。等到部署给客户试用时,频繁的出现死锁、事务不回滚的情况。对于大批量的业务数据出错但不回滚,会持续的产生恶性循环。这篇文章主要用来记录下最近半年对项目维护过程中对存储过程的一些了解。

    一、事务不回滚

    贴下示例的存储过程

    CREATE PROCEDURE procedure_test(

    IN in_param1 VARCHAR(100),

    IN in_param2 VARCHAR(20),

    OUT out_return_code VARCHAR(100)

    )

    label:BEGIN

    DECLARE r_param1 DECIMAL;

    -- 定义异常

    DECLARE EXIT HANDLER FOR SQLEXCEPTION

    BEGIN

    GET DIAGNOSTICS CONDITION 1 @P1 = MYSQL_ERRNO,@P2 = MESSAGE_TEXT;

    SET out_return_code = CONCAT('999||',@P1,'||',@P2);

    ROLLBACK;

    END;

    START TRANSACTION;-- 开始事务

    -- 业务逻辑

    SET out_return_code = '******';

    CALL procedure_getID('testType',out_return_code);

    IF LEFT(out_return_code,3)<>'000' THEN

    SET out_return_code ='获取事务ID失败';

    ROLLBACK;

    LEAVE label;

    END IF;

    --业务逻辑

    COMMIT;-- 事务结束

    END label

    在客户试运行过程中,业务逻辑的sql发生了错误之后,发现存储过程退出了,但数据没有ROLLBACK。这就很恐怖了,首先补数据就很痛苦。经过了一段时间的测试,一个个业务逻辑代码删除,一条条SQL执行盘错。最终发现,在Procedure中调用另外的Procedure就会发生不回滚的情况。

    procedure_getID 这个Procedure中也start transaciton + commit了,因此业务逻辑报错后,虽然调用了ROLLBACK但是procedure_getID的事务提交会影响到当前的Procedure,直接做了提交。后面将procedure_getID中的业务SQL拷贝至当前Procedure之后,发生错误之后就会回滚了。

    二、死锁

    这个问题目前还在解决中,这个死锁情况不多所以也就得过且过了。但是还是想先记录下,后面解决了再记录下来。目前有三个主要业务用到了一张数据表(t_details)。目前有时间了,准备着手处理这个问题,列出几点分析:

    1,t_details索引建立过多,各个Procedure用到的时候没有合理查询条件,考虑用查询需要update/delete的数据的主键,再进行数据的CRUD操作。

    2,其中行锁不直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,MySQL会锁住主键索引;如果一条语句操作了非主键索引,MySQL会先锁住非主键索引,在锁定主键索引。

    3,将三个业务的对于t_details的操作拆分成三个业务任务表来分开操作,避免同时执行三个业务时抢资源的情况。

    如果有不对的地方,请大佬提点下,多谢~

    展开全文
  • 程序里有个方法调用执行了一个存储。。。之前一直是没有问题的。。现在突然不行了。。一调用就报错[Microsoft][SQLServer2000DriverforJDBC][SQLServer]第1行:'{'附近有语法错误。Ses...程序里有个方法调用执行了一...

    程序里有个方法调用执行了一个存储。。。之前一直是没有问题的。。现在突然不行了。。一调用就报错[Microsoft][SQLServer2000DriverforJDBC][SQLServer]第1行:'{'附近有语法错误。Ses...

    程序里有个方法调用执行了一个存储。。。之前一直是没有问题的。。现在突然不行了。。一调用就报错

    [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: '{' 附近有语法错误。

    Session session = this.payMainDAO.getHibernateSession();

    Connection conn = session.connection();

    ResultSet rs =null;

    boolean isOk=false;

    //提交K3

    try {

    CallableStatement proc = conn.prepareCall("{ call TESTPROCESS() }");

    // proc.setString(1,id);

    // proc.setString(2, flag);//标记,N=新建,R=反冲

    // proc.setString(3, userId);

    rs = (ResultSet) proc.executeQuery();

    if (rs != null) {

    while (rs.next()) {

    System.out.println("AIT_K3_PAY_PROCESS:" + rs.getString(1));

    isOk=true;

    break;

    }

    }

    return isOk;

    执行到rs = (ResultSet) proc.executeQuery();

    就会出错。。

    现在调用的这个存储是我后来又随便写的一个TEST。。

    里面就最简单的一个SELECT TOP 1 * FROM TABLE

    无论是这个我TEST的还是以前调用的那个,在查询分析器里都可以执行。。

    求解。。。。。。。

    执行SQL没有问题。。比如HQL,或者其他的不是存储过程的都可以。。系统上现有的报表也都还可以出来。。就是调用存储的会出问题

    executeQuery的时候就直接跳CATCH了。。不是存储有没参数有没返回值的问题。。。是执行不了存储。。

    存储当然是有返回结果的了。。这个TESTPROCESS就是返回一个表一条纪录。。

    PS:这里本来是执行一个存储,返回的是一个VARCHAR,比如处理成功或者失败之类的。。1周前也测试过是没问题的。。中间离开了一周,回来就发现执行会报上面的错了。。同事说没改过程序,也没动过数据库。。然后怎么试都不行,我就另外写了现在这个TESTPROCESS存储过程,结果也报一样的错

    CREATE PROCEDURE [dbo].[TESTPROCESS]

    AS

    SELECT TOP 1 * FROM PAY_MAIN

    存储必须要有参数??????

    TESTPROCESS就是写来测试下是以前那个存储出了问题还是JAVA程序有什么问题。。所以这个特简单就一个返回一行的SELECT。。但还是报错

    展开

    展开全文
  • 这个是要求一个leader至少感知到有至少一个follower还跟自己保持联系 这两个配置加上上面生产者的配置联合起来用,基本可确保kafka不丢数据 (3)消费者丢数据 这种情况一般是自动提交了offset,然后你处理程序过程中...

    1、为什么要使用消息队列?

    分析:一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点,很容易被问蒙,然后就开始胡扯了。

    回答:这个问题,咱只答三个最主要的应用场景(不可否认还有其他的,但是只答三个主要的),即以下六个字:解耦、异步、削峰

    (1)解耦

    传统模式:

    传统模式的缺点:

    • 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!

    中间件模式:

    中间件模式的的优点:

    • 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。

    (2)异步

    传统模式:

    传统模式的缺点:

    • 一些非必要的业务逻辑以同步的方式运行,太耗费时间。

    中间件模式:

    中间件模式的的优点:

    • 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

    (3)削峰

    传统模式

    传统模式的缺点:

    • 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

    中间件模式:

    中间件模式的的优点:

    • 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

    2、使用了消息队列会有什么缺点?

    分析:一个使用了MQ的项目,如果连这个问题都没有考虑过,就把MQ引进去了,那就给自己的项目带来了风险。

    我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。要记住,不要给公司挖坑!

    回答:回答也很容易,从以下两个个角度来答

    • 系统可用性降低:

      你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。

      现在你非要加个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性降低

    • 系统复杂性增加:

      要多考虑很多方面的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。

      因此,需要考虑的东西更多,系统复杂性增大。

    但是,我们该用还是要用的。

    3、消息队列如何选型?

    先说一下,博主只会ActiveMQ,RabbitMQ,RocketMQ,Kafka,对什么ZeroMQ等其他MQ没啥理解,因此只能基于这四种MQ给出回答。

    分析:既然在项目中用了MQ,肯定事先要对业界流行的MQ进行调研,如果连每种MQ的优缺点都没了解清楚,就拍脑袋依据喜好,用了某种MQ,还是给项目挖坑。

    如果面试官问:"你为什么用这种MQ?。"你直接回答"领导决定的。"这种回答就很LOW了。

    还是那句话,不要给公司挖坑。

    我们可以看出,RabbitMQ版本发布比ActiveMq频繁很多。至于RocketMQ和kafka就不带大家看了,总之也比ActiveMQ活跃的多。详情,可自行查阅。

    再来一个性能对比表

    综合上面的材料得出以下两点:

    (1)中小型软件公司,建议选RabbitMQ.

    一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便。

    正所谓,成也萧何,败也萧何!他的弊端也在这里,虽然RabbitMQ是开源的,然而国内有几个能定制化开发erlang的程序员呢?

    所幸,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug,这点对于中小型公司来说十分重要。

    不考虑rocketmq和kafka的原因是,一方面中小型软件公司不如互联网公司,数据量没那么大,选消息中间件,应首选功能比较完备的,所以kafka排除。

    不考虑rocketmq的原因是,rocketmq是阿里出品,如果阿里放弃维护rocketmq,中小型公司一般抽不出人来进行rocketmq的定制化开发,因此不推荐。

    (2)大型软件公司,根据具体使用在rocketMq和kafka之间二选一

    一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。

    针对rocketMQ,大型软件公司也可以抽出人手对rocketMQ进行定制化开发,毕竟国内有能力改JAVA源码的人,还是相当多的。

    至于kafka,根据业务场景选择,如果有日志采集功能,肯定是首选kafka了。具体该选哪个,看使用场景。

    4、如何保证消息队列是高可用的?

    分析:在第二点说过了,引入消息队列后,系统的可用性下降。在生产中,没人使用单机模式的消息队列。

    因此,作为一个合格的程序员,应该对消息队列的高可用有很深刻的了解。

    如果面试的时候,面试官问,你们的消息中间件如何保证高可用的?

    如果你的回答只是表明自己只会订阅和发布消息,面试官就会怀疑你是不是只是自己搭着玩,压根没在生产用过。

    因此,请做一个爱思考,会思考,懂思考的程序员。

    回答:这问题,其实要对消息队列的集群模式要有深刻了解,才好回答。

    以rcoketMQ为例,他的集群就有多master 模式、多master多slave异步复制模式、多 master多slave同步双写模式。

    多master多slave模式部署架构图(网上找的,偷个懒,懒得画):

    其实博主第一眼看到这个图,就觉得和kafka好像,只是NameServer集群,在kafka中是用zookeeper代替,都是用来保存和发现master和slave用的。

    通信过程如下:

    Producer 与 NameServer集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Broker Master 建立长连接,且定时向 Broker 发送心跳。

    Producer 只能将消息发送到 Broker master,但是 Consumer 则不一样,它同时和提供 Topic 服务的 Master 和 Slave建立长连接,既可以从 Broker Master 订阅消息,也可以从 Broker Slave 订阅消息。

    那么kafka呢,为了对比说明直接上kafka的拓补架构图(也是找的,懒得画)

    如上图所示,一个典型的Kafka集群中包含若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。

    Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。

    Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。

    至于rabbitMQ,也有普通集群和镜像集群模式,自行去了解,比较简单,两小时即懂。

    要求,在回答高可用的问题时,应该能逻辑清晰的画出自己的MQ集群架构或清晰的叙述出来。

    5、如何保证消息不被重复消费?

    分析:这个问题其实换一种问法就是,如何保证消息队列的幂等性?

    这个问题可以认为是消息队列领域的基本问题。换句话来说,是在考察你的设计能力,这个问题的回答可以根据具体的业务场景来答,没有固定的答案。

    回答:先来说一下为什么会造成重复消费?

    其实无论是那种消息队列,造成重复消费原因其实都是类似的。

    正常情况下,消费者在消费消息时候,消费完毕后,会发送一个确认信息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除。只是不同的消息队列发送的确认信息形式不同

    例如RabbitMQ是发送一个ACK确认消息,RocketMQ是返回一个CONSUME_SUCCESS成功标志,kafka实际上有个offset的概念

    简单说一下(如果还不懂,出门找一个kafka入门到精通教程),就是每一个消息都有一个offset,kafka消费过消息后,需要提交offset,让消息队列知道自己已经消费过了。

    那造成重复消费的原因?

    就是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将该消息分发给其他的消费者。

    如何解决?这个问题针对业务场景来答分以下几点

    (1)比如,你拿到这个消息做数据库的insert操作。

    那就容易了,给这个消息做一个唯一主键,那么就算出现重复消费的情况,就会导致主键冲突,避免数据库出现脏数据。

    (2)再比如,你拿到这个消息做redis的set的操作

    那就容易了,不用解决。因为你无论set几次结果都是一样的,set操作本来就算幂等操作。

    (3)如果上面两种情况还不行,上大招。

    准备一个第三方介质,来做消费记录。以redis为例,给消息分配一个全局id,只要消费过该消息,将以K-V形式写入redis。那消费者开始消费前,先去redis中查询有没消费记录即可。

    6、如何保证消费的可靠性传输?

    分析:我们在使用消息队列的过程中,应该做到消息不能多消费,也不能少消费。如果无法做到可靠性传输,可能给公司带来千万级别的财产损失。

    同样的,如果可靠性传输在使用过程中,没有考虑到,这不是给公司挖坑么,你可以拍拍屁股走了,公司损失的钱,谁承担。

    还是那句话,认真对待每一个项目,不要给公司挖坑

    回答:其实这个可靠性传输,每种MQ都要从三个角度来分析:生产者弄丢数据、消息队列弄丢数据、消费者弄丢数据

    RabbitMQ

    (1)生产者丢数据

    从生产者弄丢数据这个角度来看,RabbitMQ提供transaction和confirm模式来确保生产者不丢消息。

    transaction机制就是说,发送消息前,开启事物(channel.txSelect()),然后发送消息,如果发送过程中出现什么异常,事物就会回滚(channel.txRollback()),如果发送成功则提交事物(channel.txCommit())。

    然而缺点就是吞吐量下降了。因此,按照博主的经验,生产上用confirm模式的居多。

    一旦channel进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始)

    一旦消息被投递到所有匹配的队列之后,rabbitMQ就会发送一个Ack给生产者(包含消息的唯一ID)

    这就使得生产者知道消息已经正确到达目的队列了.如果rabiitMQ没能处理该消息,则会发送一个Nack消息给你,你可以进行重试操作。

    处理Ack和Nack的代码如下所示(说好不上代码的,偷偷上了):

    channel.addConfirmListener(new ConfirmListener() {
        @Override
        public void handleNack(long deliveryTag, boolean multiple) throws IOException {
            System.out.println("nack: deliveryTag = "+deliveryTag+" multiple: "+multiple);
        }
        @Override
        public void handleAck(long deliveryTag, boolean multiple) throws IOException {
            System.out.println("ack: deliveryTag = "+deliveryTag+" multiple: "+multiple);
        }
    });
    

    (2)消息队列丢数据

    处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。

    这个持久化配置可以和confirm机制配合使用,你可以在消息持久化磁盘后,再给生产者发送一个Ack信号。

    这样,如果消息持久化磁盘之前,rabbitMQ阵亡了,那么生产者收不到Ack信号,生产者会自动重发。

    那么如何持久化呢,这里顺便说一下吧,其实也很容易,就下面两步

    1、将queue的持久化标识durable设置为true,则代表是一个持久的队列

    2、发送消息的时候将deliveryMode=2

    这样设置以后,rabbitMQ就算挂了,重启后也能恢复数据

    (3)消费者丢数据

    消费者丢数据一般是因为采用了自动确认消息模式。

    这种模式下,消费者会自动确认收到信息。这时rahbitMQ会立即将消息删除,这种情况下如果消费者出现异常而没能处理该消息,就会丢失该消息。

    至于解决方案,采用手动确认消息即可。

    kafka

    Producer在发布消息到某个Partition时,先通过ZooKeeper找到该Partition的Leader

    然后无论该Topic的Replication Factor为多少(也即该Partition有多少个Replica),Producer只将该消息发送到该Partition的Leader。

    Leader会将该消息写入其本地Log。每个Follower都从Leader中pull数据。
    针对上述情况,得出如下分析

    (1)生产者丢数据

    在kafka生产中,基本都有一个leader和多个follwer。follwer会去同步leader的信息。

    因此,为了避免生产者丢数据,做如下两点配置

    1. 第一个配置要在producer端设置acks=all。这个配置保证了,follwer同步完成后,才认为消息发送成功。

    2. 在producer端设置retries=MAX,一旦写入失败,这无限重试

    (2)消息队列丢数据

    针对消息队列丢数据的情况,无外乎就是,数据还没同步,leader就挂了,这时zookpeer会将其他的follwer切换为leader,那数据就丢失了。

    针对这种情况,应该做两个配置。

    1. replication.factor参数,这个值必须大于1,即要求每个partition必须有至少2个副本

    2. min.insync.replicas参数,这个值必须大于1,这个是要求一个leader至少感知到有至少一个follower还跟自己保持联系

    这两个配置加上上面生产者的配置联合起来用,基本可确保kafka不丢数据

    (3)消费者丢数据

    这种情况一般是自动提交了offset,然后你处理程序过程中挂了。kafka以为你处理好了。

    再强调一次offset是干嘛的

    offset:指的是kafka的topic中的每个消费组消费的下标。

    简单的来说就是一条消息对应一个offset下标,每次消费数据的时候如果提交offset,那么下次消费就会从提交的offset加一那里开始消费。

    比如一个topic中有100条数据,我消费了50条并且提交了,那么此时的kafka服务端记录提交的offset就是49(offset从0开始),那么下次消费的时候offset就从50开始消费。

    解决方案也很简单,改成手动提交即可。

    ActiveMQ和RocketMQ

    大家自行查阅吧

    7、如何保证消息的顺序性?

    分析:其实并非所有的公司都有这种业务需求,但是还是对这个问题要有所复习。

    回答:针对这个问题,通过某种算法,将需要保持先后顺序的消息放到同一个消息队列中(kafka中就是partition,rabbitMq中就是queue)。然后只用一个消费者去消费该队列。

    有的人会问:那如果为了吞吐量,有多个消费者去消费怎么办?

    这个问题,没有固定回答的套路。比如我们有一个微博的操作,发微博、写评论、删除微博,这三个异步操作。如果是这样一个业务场景,那只要重试就行。

    比如你一个消费者先执行了写评论的操作,但是这时候,微博都还没发,写评论一定是失败的,等一段时间。等另一个消费者,先执行写评论的操作后,再执行,就可以成功。

    总之,针对这个问题,我的观点是保证入队有序就行,出队以后的顺序交给消费者自己去保证,没有固定套路。

    最后

    面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

    想获取个人高清面试题的可以戳这里免费领取及个人也准备了很多面试题含答案的资料供你刷!

    • Java核心知识整理

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    Java核心知识

    • Spring全家桶(实战系列)

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    • 其他电子书资料

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    Step3:刷题

    既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

    以下是我私藏的面试题库:

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    z8-1627554213367)]

    Java核心知识

    • Spring全家桶(实战系列)

    [外链图片转存中…(img-c2oqyOXB-1627554213368)]

    • 其他电子书资料

    [外链图片转存中…(img-XRu94EeU-1627554213369)]

    Step3:刷题

    既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

    以下是我私藏的面试题库:

    [外链图片转存中…(img-gw9tNqrI-1627554213370)]

    展开全文
  • SET ROWCOUNT,SET NOCOUNT SET ROWCOUNT (Transact-SQL) 在停止特定查询之前要处理的行数(整数). 重要提示 在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELE ... TopFreeTheme精选免费模板【20130827...

    以多个实例方式打开Notepad&plus;&plus;

    Right-click any Notepad++ shortcut. Select Properties. Move to the Shortcut tab. In the end of the T ...

    SET ROWCOUNT&comma;SET NOCOUNT

    SET ROWCOUNT (Transact-SQL) 在停止特定查询之前要处理的行数(整数). 重要提示 在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELE ...

    TopFreeTheme精选免费模板【20130827】

    今天我们整理了一些关于WordPress, Joomla, Drupal, Magento, OpenCart的最新免费模板主题,绝大多数都是来自ThemeForest的响应式风格模板主题.题材多样化 ...

    一款js控制背景图片平铺

    背景图片的平铺方法有很多种,纯色背景,渐变背景,图片背景,今天讲的是移动端的图片背景~~~~

    从Image Caption Generation理解深度学习

    0. 前面的话 建丁让我写一篇深度学习相关小文章,目标读者是国内的开发者.刚接到这个任务时我是颇为忐忑的,写文章要讲究厚积薄发,如果“水之积也不厚”,“则其负大舟也无力”.因为我自知水平很有限,又不是 ...

    openstack 的 policy 问题。

    想写nova的policy的实现, 但是发现网上,有人写的很不错了. ref: http://blog.csdn.net/hackerain/article/details/8241691 但是,po ...

    IntelliJ Idea 经常使用快捷键列表

    Alt+回车 导入包,自己主动修正Ctrl+N   查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L  格式化代码 Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如 ...

    SQL2008清空删除日志&colon;

    SQL2008清空删除日志: '在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式. USE [master] GO ALTER DATABASE DNName SET ...

    【链表问题】打卡9:将单链表的每K个节点之间逆序

    前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下 ...

    java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

    展开全文
  • mysql中看看这个存储过程老是报错我的mysql版本是5.5.21的,下面这个存储过程是需要更加另外3张表的数据来更新strategycontracttemp中数据,但是每次更新到中途报错,先代码:SQL codeCREATE PORCEDURE spInsST() ...
  • 有时候,不希望存储过程抛出错误中止执行,而是希望返回一个错误码。 Mysql 支持异常处理,通过定义 CONTINUE/EXIT 异常处理的 HANDLER 来捕获 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 / 无数据 / 其他异常)。其中...
  • 存储过程 for

    2021-01-31 01:32:36
    关于存储过程 for的搜索结果问题RDS for MySQL 存储过程的创建和查看1. 创建存储过程可以通过 DMS 或 MySQL 客户端登录到 RDS, 创建存储过程。示例代码如下:DROP PROCEDURE IF EXISTS TEST_PROC;DELIMITER //CRE.....
  • 下面是示例代码,在发生异常的时候会将...存储过程异常处理示例复制代码 代码如下:-- ---------------------------------------------------------------------------------- Routine DDL-- Note: comments before an...
  • 原因在于MYSQL的存储过程执行完成后除了返回实际结果集还会返回存储过程执行的转态 ,而上面的代码仅处理了第一个结果集,第二个结果集并没有被释放掉。 When a stored procedure returns a resultset, MySQL...
  • mysql 存储过程的创建

    2020-12-31 12:37:04
    "为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行...
  • begin --将要处理的条码存入临时表里 /*insert into xry_temp_barcode2 select distinct(vbarcode) from infl_nc_out_b where dbizdate=to_char(to_date(sysdate-1),'yyyy-mm-dd');*/ --从临时表里取出条码,再调用...
  • Oracle存储过程(转)

    2021-05-01 07:21:57
    --可以执行一些业务逻辑一:Oracle中的函数与存储过程的区别:A:函数必须有返回值,而过程没有.B:函数可以单独执行.而过程必须通过execute执行.C:函数可以嵌入到SQL语句中执行.而过程不行.其实我们可以将比较复杂的...
  • oracle调试存储过程过程详解oracle如果存储过程比较复杂,我们要定位到错误就比较困难,那么可以存储过程的调试功能先按简单的存储过程做个例子,就是上次做的存储过程(proc_test)1、先在数据库的procedures文件...
  • mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现语法如下:DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement handler_type: CONTINUE | EXIT condition_value: ...
  • MySQL创建存储过程

    2020-12-31 12:37:04
    存储过程是数据库管理中常用的技术之一,可以很方便的做些类似数据统计、数据分析等工作,市场上的SQL SERVER、ORACLE、MySQL都支持存储过程,但不同的数据库环境语法结构有点区别,本案例给大家讲解下MySQL创建存储...
  • mysql导入存储过程时declare报错的问题解决 在导入存储过程时经常遇见下列DECLARE报错的问题: ? Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL ...
  • 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个...
  • 主要内容如下: 1.1 异常处理概念1.1.1 预定义的异常处理1.1.2 非预定义的异常处理 1.1.3 用户自定义的异常处理 1.1.4 用户定义的异常处理 异常错误传播1.2 1.2.1 在执行部分引发异常错误1.2.2 在声明部分引发异常...
  • 在PHP同一事物里调用MYSQL的存储过程后再次执行另外的一个或多个命令(或者在同一事物里执行多个存储过程),... you can't run this command now sss 先给出代码:存储过程:CREATE PROCEDURE test1()begindrop tabl...
  • 公司有一个查询系统慢查询较多,在不改变现有数据存储结构的情况下对已有数据进行查询优化.通过索引优化后,主要的问题体现在sql关联之后检索效率就会被拉低,数据也就200多万条. 于此同时如果添加了一些基础的基于索引...
  • Oracle数据库执行存储过程的错误解出现了错误,错误信息如下:ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytesORA-06512: at "SYS.DBMS_OUTPUT", line 32ORA-06512: at "SYS.DBMS_OUTPUT", line 97ORA...
  • mysql存储过程一例

    2021-01-19 12:13:05
    同事给的一个存储过程有点问题,测试发现" IF date_format(sysdate(),'%H:%i:%s') >From_Time AND date_format(sysdate(),'%H:%i:%s') < End_Time THEN"这个语句有问题。创建如下存储过程进行分析:mysql> ...
  • 14.1.4 定义条件和处理程序定义条件和处理程序是事先定义程序执行过程中可能遇到的问题。并且可以在处理程序中定义解决这些问题的办法。这种方式可以提前预测可能出现的问题, 并提出解决办法。这样可以增强程序处理...
  • 1. 异常错误处理在PL/pgSQL函数中,如果没有异常捕获,函数会在发生错误时直接退出,与其相关的事物也会随之回滚。我们可以通过使用带有EXCEPTION子句的BEGIN块来捕获异常并使其从中恢复。见如下声明形式[<>]...
  • mysql执行存储过程sql

    2021-01-19 16:20:29
    mysql存储过程mysql存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它...
  • 转载链接:http://lin49940.iteye.com/blog/466626 今天一个同事写oracle 的存储过程遇到了一个问题, 他在里面update 操作不能完成更新的操作, 但是又不会报错. 如一个表 A(id,code, name, type) 在存储过程中的更新...
  • 问题: 一开发同事反应他的测试用户无法执行存储过程,使用 plsql 远程连接执行存储过程报错如下: ORA-1031:Insufficient privileges. Note:Debugging requires the DEBUG CONNECT SESSION system privilege. 从...
  • 如何在存储过程的循环中实现错误的异常处理CREATE OR REPLACE PROCEDURE PRO_TEST16 ( OUT P_COUNTER INTEGER,OUT returnCode INTEGER, OUT returnMsg CHAR(32) )-- returnCode 返回执行中的的错误代码 -- returnMsg...
  • 业务处理 "上面有两个select,任何一个查不到数据都会抛异常" 没有定义子块,出了异常,也只是最外层的EXCEPTION捕捉 无法分辨 应该: BEGIN BEGIN strsql :='select name from student where age=:1'; execute ...
  • dml_table_name是表名 err_log_table_name 是错误日志表,每条数据生成一条 存储过程执行后会生成一张日志表 create table TEST_INSERT_ERRLOG ( ORA_ERR_NUMBER$ NUMBER, ORA_ERR_MESG$ VARCHAR2(2000), ORA_ERR_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,658
精华内容 62,263
关键字:

存储过程报错怎么处理

友情链接: 2.rar