sqls在sybase ase中的begin end块内处理

时间:2016-06-24 07:40:02

标签: sybase sybase-ase

我有一个带有开始结束块的存储过程。例如,该块中的select语句和更新语句很少。

在这个开始块中,是根据它们的编写方式一起执行所有sql还是按顺序执行?

    begin
      select stmt
      update stmt
      select stmt
      .
      .
    end

2 个答案:

答案 0 :(得分:1)

存储过程中的语句按顺序执行。

你唯一不知道ordet和可以并行执行的东西是每个语句内部的不同子步骤。

例如,在:

    SELECT a, b
    FROM table t
    INNER JOIN other o
       ON o.id = t.id
    INNER JOIN third d
       ON d.o_id = o.o_id
    WHERE t.b = 123

    UPDATE t
    SET x = 123
    FROM table t
    WHERE t.b = 234

选择将始终在更新之前执行,但是在select语句中,您不知道'table'是先与'other'连接,还是以'third'连接,或者如果'other'连接在一起用'第三'然后用'表'。

答案 1 :(得分:0)

开始中的所有语句 - 按顺序执行结束块。 我遇到过这个死锁问题,可能因为程序必须在多个线程中运行。

如果这可以在单个或2-3个线程中执行,并且事务很小,那么进程可以在它升级到死锁之前等待。或者添加带有错误编号的try catch块以便在死锁错误时重试更新。