久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

  • <tfoot id='pk9Tv'></tfoot>
  • <small id='pk9Tv'></small><noframes id='pk9Tv'>

    <legend id='pk9Tv'><style id='pk9Tv'><dir id='pk9Tv'><q id='pk9Tv'></q></dir></style></legend>
    • <bdo id='pk9Tv'></bdo><ul id='pk9Tv'></ul>
    <i id='pk9Tv'><tr id='pk9Tv'><dt id='pk9Tv'><q id='pk9Tv'><span id='pk9Tv'><b id='pk9Tv'><form id='pk9Tv'><ins id='pk9Tv'></ins><ul id='pk9Tv'></ul><sub id='pk9Tv'></sub></form><legend id='pk9Tv'></legend><bdo id='pk9Tv'><pre id='pk9Tv'><center id='pk9Tv'></center></pre></bdo></b><th id='pk9Tv'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='pk9Tv'><tfoot id='pk9Tv'></tfoot><dl id='pk9Tv'><fieldset id='pk9Tv'></fieldset></dl></div>

      1. 計算受 plpgsql 函數影響的行數

        Count the rows affected by plpgsql function(計算受 plpgsql 函數影響的行數)
          <tbody id='X1kJl'></tbody>

        <small id='X1kJl'></small><noframes id='X1kJl'>

      2. <legend id='X1kJl'><style id='X1kJl'><dir id='X1kJl'><q id='X1kJl'></q></dir></style></legend>

        1. <i id='X1kJl'><tr id='X1kJl'><dt id='X1kJl'><q id='X1kJl'><span id='X1kJl'><b id='X1kJl'><form id='X1kJl'><ins id='X1kJl'></ins><ul id='X1kJl'></ul><sub id='X1kJl'></sub></form><legend id='X1kJl'></legend><bdo id='X1kJl'><pre id='X1kJl'><center id='X1kJl'></center></pre></bdo></b><th id='X1kJl'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='X1kJl'><tfoot id='X1kJl'></tfoot><dl id='X1kJl'><fieldset id='X1kJl'></fieldset></dl></div>

            <tfoot id='X1kJl'></tfoot>

                • <bdo id='X1kJl'></bdo><ul id='X1kJl'></ul>
                  本文介紹了計算受 plpgsql 函數影響的行數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我有以下功能:

                  CREATE FUNCTION user_delete(IN id INT4)
                    RETURNS VOID
                  AS
                    $BODY$
                    BEGIN
                      SELECT * FROM "user" WHERE user_id = id FOR UPDATE;
                      DELETE FROM user_role WHERE user_id = id;
                      DELETE FROM user_permission WHERE user_id = id;
                      DELETE FROM permission_cache WHERE user_id = id;
                      DELETE FROM access WHERE user_id = id;
                      DELETE FROM "user" WHERE user_id = id;
                    END;
                    $BODY$
                  LANGUAGE plpgsql VOLATILE;
                  

                  我將它與 PHP PDO 一起使用:

                  I use this with PHP PDO:

                  $stmt = $pdo->prepare('SELECT * FROM user_delete(?)');
                  $stmt->execute(array($user['id']));
                  

                  結果包含現在

                  array(
                      array('user_delete' => '')
                  )
                  

                  所以

                  $stmt->rowCount();
                  

                  總是一個.

                  是否可以解決這個問題:通過函數不返回任何內容(因為它是無效的),并且通過 rowCount 返回受影響行的計數?

                  Is it possible to fix this: by the function return nothing (because it is void), and by the rowCount return the count of the affected rows?

                  解決方案:

                  php:

                  public function delete($id)
                  {
                      try {
                          $this->__call('user_delete', array($id));
                      } catch (PDOException $e) {
                          if ($e->getCode() === 'UE404')
                              throw new NotFoundException();
                          else
                              throw $e;
                      }
                  }
                  

                  sql:

                  CREATE FUNCTION user_delete(IN id INT4)
                    RETURNS VOID
                  AS
                    $BODY$
                    BEGIN
                      DELETE FROM user_role WHERE user_id = id;
                      DELETE FROM user_permission WHERE user_id = id;
                      DELETE FROM permission_cache WHERE user_id = id;
                      DELETE FROM access WHERE user_id = id;
                      DELETE FROM "user" WHERE user_id = id;
                      IF NOT FOUND THEN
                        RAISE SQLSTATE 'UE404' USING MESSAGE = 'not found for delete';
                      END IF;
                    END;
                    $BODY$
                  LANGUAGE plpgsql VOLATILE;
                  

                  我可以使用 setof void 返回類型實現返回零長度結果,但是如果我在找不到資源時強制它拋出 PDOException 就沒有必要了...

                  I can achieve return zero length result with setof void return type, but that is not necessary if I force it to throw PDOException when the resource is not found ...

                  推薦答案

                  您可以使用:

                  GET DIAGNOSTICS integer_var = ROW_COUNT;
                  

                  .. 并讓函數返回計數.手冊中的詳細信息.

                  .. and let the function return the count. Details in the manual.

                  示例:

                  CREATE OR REPLACE FUNCTION user_delete(id int, OUT del_ct int) AS
                  $func$
                  DECLARE
                     i int;  -- helper var
                  BEGIN
                     DELETE FROM user_role WHERE user_id = $1;
                     GET DIAGNOSTICS del_ct = ROW_COUNT;  -- init
                  
                     DELETE FROM user_permission WHERE user_id = $1;
                     GET DIAGNOSTICS i = ROW_COUNT;  del_ct := del_ct + i;
                  
                     DELETE FROM permission_cache WHERE user_id = $1;
                     GET DIAGNOSTICS i = ROW_COUNT;  del_ct := del_ct + i;
                  
                     DELETE FROM access WHERE user_id = $1;
                     GET DIAGNOSTICS i = ROW_COUNT;  del_ct := del_ct + i;
                  
                     DELETE FROM "user" WHERE user_id = $1;
                     GET DIAGNOSTICS i = ROW_COUNT;  del_ct := del_ct + i;
                  END
                  $func$  LANGUAGE plpgsql;
                  

                  您將此作為第一個聲明:

                  You had this as 1st statement:

                  SELECT * FROM "user" WHERE user_id = $1 FOR UPDATE;

                  無效語法 - 在 plpgsql 函數中,您需要將 PERFORM 用于沒有目標的 SELECT 語句:

                  Invalid syntax - inside a plpgsql function you need to use PERFORM for SELECT statements without target:

                  PERFORM * FROM "user" WHERE user_id = $1 FOR UPDATE;
                  

                  • SELECT 在 PL/pgSQL 函數中引發異常
                  • 但隨后的 DELETE 語句也同樣鎖定該行.不需要 使用 為更新開始.

                    But the ensuing DELETE statement locks the row just as well. No need for manual locking with FOR UPDATE to begin with.

                    添加的OUT del_ct int 聲明了一個OUT 參數,該參數可以像任何變量一樣賦值,并在函數結束時自動返回.它還消除了對顯式 RETURNS 聲明的需要.

                    The added OUT del_ct int declares an OUT parameter that can be assigned like any variable and is returned at the end of the function automatically. It also obviates the need for an explicit RETURNS declaration.

                    這篇關于計算受 plpgsql 函數影響的行數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                    【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  Deadlock exception code for PHP, MySQL PDOException?(PHP、MySQL PDOException 的死鎖異常代碼?)
                  PHP PDO MySQL scrollable cursor doesn#39;t work(PHP PDO MySQL 可滾動游標不起作用)
                  PHP PDO ODBC connection(PHP PDO ODBC 連接)
                  Using PDO::FETCH_CLASS with Magic Methods(使用 PDO::FETCH_CLASS 和魔術方法)
                  php pdo get only one value from mysql; value that equals to variable(php pdo 只從 mysql 獲取一個值;等于變量的值)
                  MSSQL PDO could not find driver(MSSQL PDO 找不到驅動程序)
                    <tbody id='ZYUnh'></tbody>

                  <tfoot id='ZYUnh'></tfoot>
                  <legend id='ZYUnh'><style id='ZYUnh'><dir id='ZYUnh'><q id='ZYUnh'></q></dir></style></legend>
                      1. <small id='ZYUnh'></small><noframes id='ZYUnh'>

                        • <bdo id='ZYUnh'></bdo><ul id='ZYUnh'></ul>

                            <i id='ZYUnh'><tr id='ZYUnh'><dt id='ZYUnh'><q id='ZYUnh'><span id='ZYUnh'><b id='ZYUnh'><form id='ZYUnh'><ins id='ZYUnh'></ins><ul id='ZYUnh'></ul><sub id='ZYUnh'></sub></form><legend id='ZYUnh'></legend><bdo id='ZYUnh'><pre id='ZYUnh'><center id='ZYUnh'></center></pre></bdo></b><th id='ZYUnh'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='ZYUnh'><tfoot id='ZYUnh'></tfoot><dl id='ZYUnh'><fieldset id='ZYUnh'></fieldset></dl></div>

                            主站蜘蛛池模板: jlzzxxxx18hd护士 | 亚洲精品久久区二区三区蜜桃臀 | 91久久网站 | 亚洲五码在线 | 天天爽夜夜爽精品视频婷婷 | 欧美日韩在线成人 | 三区四区在线观看 | 日本三级电影在线免费观看 | av一区二区在线观看 | 久久夜色精品国产 | 欧美一级大片免费看 | 国产成人亚洲精品自产在线 | 中文字幕av第一页 | 国产精品视频网 | 日韩av黄色 | 天天躁日日躁狠狠的躁天龙影院 | 午夜电影网站 | 欧美成人激情视频 | 日韩一区二区三区在线视频 | 一级做a爰片性色毛片视频停止 | 国产精品视频一区二区三区 | 青青99 | 在线免费观看黄网 | 亚洲视频一区二区 | 羞羞视频在线网站观看 | 精品一区二区三区在线观看 | av毛片在线免费观看 | 亚洲网在线 | 99av成人精品国语自产拍 | 久久久久一区二区三区四区 | 在线观看a视频 | 91麻豆精品国产91久久久久久 | 一区二区三区亚洲精品国 | 国产一区不卡 | 91视频在线看 | 看特级黄色片 | 久久av一区二区三区 | 国产亚洲欧美在线视频 | 在线观看av网站永久 | 色资源在线 | 日韩免费一区二区 |