2014-04-27 34 views
-1

所以我寫了一個過程,該過程應該將兩個字符串連接在一個變量中,然後將其存儲在數據庫中。該過程工作正常,當我運行它,但它不存儲在數據庫中的變量。代替它存儲爲0。 這是我用mysql:在一個變量中加入兩個字符串

代碼
select memFname, memLname into fn, ln from member where memberid = memid; 
SET v_name := fn || ' ' || ln ; 

insert into profile(memberid, fullName) values (memid, v_name); 

FN,LN和v_name是varchar類型的變量。 memid是整數類型的變量。 我在這裏錯過了什麼?

我正在使用觸發器來調用過程。

觸發碼

DELIMITER $$ 
create trigger prof_name 
after insert on member 
for each row 
begin 
call profile_fullname(new.memberid); 

END $$; 
DELIMITER ; 

構件表結構: MEMBERID整數, memfname VARCHAR, memlname VARCHAR。

個人資料表結構: profid整數, memberid整數。

+0

您使用的是Oracle的語法,但你的問題被標記的MySQL。請適當標記。 –

回答

0

默認情況下,MySQL中的||運算符是一個邏輯運算符。你正在使用它作爲concat,這就是爲什麼我認爲你在使用Oracle。作爲邏輯運算符,它會將每個參數轉換爲邏輯表達式,其值爲01。顯然,它將它們轉換爲0 s,這就是爲什麼你在表中獲得0。替代方案將是1,這不是更有趣。

正確的解決方案是使用concat()而不是||。您還可以根據需要將系統變量PIPES_AS_CONCAT設置爲使用||,但通常只會在您試圖在數據庫之間移植代碼時設置該變量。

下面舉例說明:

update profile 
    set fullName = (select concat(memFname, ' ', memLname) from member m where m.memberid = memid) 
    where profile.memberid = memid; 

如果你需要的是一個插入,它看起來是這樣的:

insert into profile(memberid, fullname) 
    select memid, concat(memFname, ' ', memLname) 
    from member m 
    where m.memberid = memid; 
+0

它仍然在DB – Wabbit

+0

@Wabbit中插入全名值爲0。 。 。編輯問題並顯示'profile'和'member'的表格佈局。 –

+0

謝謝!!這很有幫助 – Wabbit

相關問題