pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

  • <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="zhhhnf5" 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="n5nddvv" 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="t55dbvb" id='ZYUnh'><tfoot id='ZYUnh'></tfoot><dl id='ZYUnh'><fieldset id='ZYUnh'></fieldset></dl></div>

                            主站蜘蛛池模板: 亮点云建站-网站建设制作平台 | 科客,主见不成见| 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 云杂志网-学术期刊-首页 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 出国劳务公司_正规派遣公司[严海] | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 升降炉_真空气氛炉_管式电阻炉厂家-山东中辰电炉有限公司 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 纸张环压仪-纸张平滑度仪-杭州纸邦自动化技术有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 金属雕花板_厂家直销_价格低-山东慧诚建筑材料有限公司 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 板材品牌-中国胶合板行业十大品牌-环保板材-上海声达板材 | 农业仪器网 - 中国自动化农业仪器信息交流平台| 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 |