mysql如何存儲過程返回記錄的更新條數


#ROW_COUNT()返回被前面語句升級的、插入的或刪除的行數。
#這個行數和 mysql 客戶端顯示的行數及 mysql_affected_rows() C API 函數返回的值相同。
use test;
create table t(id int,NAME varchar(200),addr varchar(200));
INSERT INTO t VALUES(1),(2),(3);
#未查詢到dml的行數,應該是數據已經提交導致
SELECT ROW_COUNT();

DELETE FROM t WHERE id IN(1,2);

SELECT ROW_COUNT();
----------------------------------------------
#調用procedure,f_error_code為輸出參數
#  if char_length(f_str2) != 0 then的參數傳遞時需要加3個單引號,應該是bug
call `sp_test_prepare`(1,'un1','ustr11','''ustr2''',@f_error_code);
call `sp_test_prepare`(1,'n1','str','''str2''',@f_error_code);

SELECT ROW_COUNT();
SELECT @f_error_code;

create table lk5(id int,name varchar(100),str varchar(100),str2 varchar(100));
truncate lk5;
insert into lk5 values(1,'n1','str11','str21'),(2,'n2','str12','str22');
select * from lk5;
------------
#定義分隔符
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_test_prepare` $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test_prepare`(
  IN f_id int,
  IN f_name varchar(64), 
  IN f_str varchar(255),
  IN f_str2 varchar(255),
  OUT f_error_code int
)
BEGIN
  declare cnt int default 0;
  set @stmt = concat('update lk5 set `name` =''',f_name,''', str = ''',f_str,'''');
  set f_error_code = FALSE;
  if char_length(f_str2) != 0 then
    set @stmt = concat(@stmt,', str2 = ',f_str2);
  end if;
  set @stmt = concat(@stmt, ' where id = ',f_id);
  prepare s1 from @stmt;
  execute s1;
  -- Must be above of the deallocate statement.
  -- 只能放在這里才能顯示出正確的結果。
  set cnt = row_count();
  deallocate prepare s1;
  if cnt > 0 then
    set f_error_code =cnt
; end if; END$$ #DELIMITER ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM