存儲過程(根據(jù)傳入字段恃疯,來操作數(shù)據(jù)表)

自己做個備忘記錄

1.需求:

根據(jù)傳入的字段查詢漏设,給查詢的表添加鎖,查詢不允許更新澡谭,
更新成功后添加添加詳細(xì)愿题。

2,。需要用到表鎖蛙奖,事務(wù)潘酗,拼裝sql語句執(zhí)行

CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(IN `i_field` varchar(32),IN `i_uid` varchar(32),IN `i_amount` varchar(32),IN `i_source` varchar(255),IN `i_attach` varchar(1000),OUT `o_status` tinyint,OUT `msg` varchar(1000))
Label_end:
BEGIN
    #i_field 請求user_wallet的字段,i_uid用戶uid,i_amount 變化的金額,i_source為插入錢包source字段數(shù)據(jù)雁仲,i_attach為插入錢包attach字段json數(shù)據(jù)
    DECLARE num_error TINYINT default 0;
    #sql語句出錯時num_error賦值為1
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET num_error = 1;  
    IF ((i_field REGEXP 'balance|coin|lvbao|disposit') = 0) THEN
    #沒有該字段(字段限制)
        SET msg = '請?zhí)顚懻_的字段';
        SET o_status = 0;
        LEAVE label_end;
    END IF;

    IF (i_amount= 0) THEN
        SET o_status = 0;
        SET msg = '輸入金額不能為0';
        LEAVE label_end;
    END IF;

    select COUNT(*) from user_permission where uid = i_uid AND freeze_status != 0;
    IF (FOUND_ROWS() = 0) THEN
    #--錢包凍結(jié)
        SET o_status = 0;
        SET msg = '錢包被凍結(jié)';
        LEAVE label_end;
    END IF;
    
    #查詢并鎖表(查詢完畢之前不能更新該數(shù)據(jù))
    SELECT * FROM user_wallet WHERE uid = i_uid FOR UPDATE;
    IF (FOUND_ROWS() = 0) THEN
    #--沒有用戶信息
        SET o_status = 0;
        SET msg = '沒有用戶';
        LEAVE label_end;
    END IF;
    
    START TRANSACTION;

    #執(zhí)行拼裝的sql語句
    SET @sql_concat = CONCAT('update user_wallet set ', i_field, " = ", i_field," + ", i_amount," where uid = '", i_uid, "'");
    PREPARE presql FROM @sql_concat;
    EXECUTE presql;
    #影響行數(shù)不能加在DEALLOCATE PREPARE presql; 后面仔夺,不然不能獲取到影響行數(shù)
    IF (ROW_COUNT() < 1 ) THEN
            #當(dāng)sql語句出錯時, 為-1
            SET o_status = 0;
            SET msg = '更新錢包失敗';
            SET num_error = num_error + 1;
    END IF;
    DEALLOCATE PREPARE presql;
    
    #拼裝sql語句不能賦值給局部變量攒砖,可以賦值給用戶變量
    SET @sql_concat = CONCAT('select ', i_field, " INTO @field_total from user_wallet where uid = '", i_uid, "'");
    PREPARE presql FROM @sql_concat;
    EXECUTE presql; 
    DEALLOCATE PREPARE presql;
    
    SET @sql_concat = CONCAT('insert into user_wallet_', i_field, "_detail(uid, value, remain, source, attach) values ('",i_uid, "','", i_amount, "','", @field_total, "','", i_source, "','", i_attach, "')");
    PREPARE presql FROM @sql_concat;
    EXECUTE presql;
    IF (ROW_COUNT() < 1 ) THEN
            #當(dāng)sql語句出錯時缸兔, 為-1
            SET o_status = 0;
            SET msg = '插入詳細(xì)失敗';
            SET num_error = num_error + 1;
            LEAVE label_end;
    END IF;
    DEALLOCATE PREPARE presql;
    SET @field_total = 0;
    
    IF (num_error > 0) THEN
        ROLLBACK;
        LEAVE label_end;
    ELSE
        #不發(fā)生錯誤,切能成功插入吹艇,和更新
        COMMIT;
    END IF;
    
    SET o_status = 1;
    SET msg = '操作成功';
        

END;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惰蜜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子受神,更是在濱河造成了極大的恐慌抛猖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼻听,死亡現(xiàn)場離奇詭異财著,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撑碴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門撑教,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人醉拓,你說我怎么就攤上這事伟姐。” “怎么了廉嚼?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵玫镐,是天一觀的道長。 經(jīng)常有香客問我怠噪,道長,這世上最難降的妖魔是什么杜跷? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任傍念,我火速辦了婚禮矫夷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘憋槐。我一直安慰自己双藕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布阳仔。 她就那樣靜靜地躺著忧陪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪近范。 梳的紋絲不亂的頭發(fā)上嘶摊,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音评矩,去河邊找鬼叶堆。 笑死,一個胖子當(dāng)著我的面吹牛斥杜,可吹牛的內(nèi)容都是我干的虱颗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蔗喂,長吁一口氣:“原來是場噩夢啊……” “哼忘渔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缰儿,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畦粮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后返弹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锈玉,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年义起,在試婚紗的時候發(fā)現(xiàn)自己被綠了拉背。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡默终,死狀恐怖椅棺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情齐蔽,我是刑警寧澤两疚,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站含滴,受9級特大地震影響诱渤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谈况,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一勺美、第九天 我趴在偏房一處隱蔽的房頂上張望递胧。 院中可真熱鬧,春花似錦赡茸、人聲如沸缎脾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遗菠。三九已至,卻和暖如春华蜒,著一層夾襖步出監(jiān)牢的瞬間辙纬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工友多, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牲平,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓域滥,卻偏偏與公主長得像纵柿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子启绰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 9,733評論 0 44
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,940評論 2 89
  • 我們學(xué)校寢室是六人間的那種昂儒,其中有三個人喜歡玩劍俠情緣,玩游戲的時候他們總是用變聲器玩轉(zhuǎn)各種聲音撩漢子委可,首先聲...
    寄托館閱讀 1,858評論 0 3
  • 通訊手段越來越發(fā)達(dá)渊跋,人與人之間的溝通卻越來越少。木心先生的《從前慢》這樣寫道:從前的日色變得慢 車着倾,馬拾酝,郵件都慢 ...
    十閣主閱讀 306評論 0 1
  • 這首歌是你推薦我聽的,我最喜歡歌曲的尾聲卡者,沒有憂傷蒿囤,沒有遺憾,似乎張眼能看到的是笑臉崇决,你的笑臉材诽。 當(dāng)我遞...
    老姜茶閱讀 358評論 0 0