2014-03-19 60 views
0

我正在使用存儲過程。MySQl存儲過程傳遞帶參數名稱和值的參數

create procedure uspCommonMasterInsertUpdateSingleItem 
(
    p_id int, 
    p_name varchar(50), 
    p_head int, 
    p_desc varchar(500), 
    p_ct_nm varchar(50) 
) 
begin 
    declare p_returnvalue int; 
    declare p_ct_cd int ; 
    set p_ct_cd = (select ct_cd from com_typ where ct_nm = p_ct_nm); 

    if (p_id is null) then 
     insert into com_mst(
      ct_cd, 
      cm_nm, 
      cm_hed, 
      cm_dsg 
     ) 
     values 
     (
      p_ct_cd, 
      p_name, 
      p_head, 
      p_desc 
     ) ; 
     select p_returnvalue = LAST_INSERT_ID(); 
    else 
     update com_mst set 
      ct_cd=p_ct_cd, 
      cm_nm=p_name, 
      cm_hed =p_head, 
      cm_dsg = p_dsg 
     where cm_cd = p_id ; 
     select p_returnvalue = p_id; 
    end if ; 
end 

,當我執行這個

call uspCommonMasterInsertUpdateSingleItem (p_name := 'kk',p_head := '1',p_desc := 'des',p_ct_nm := 'Department') 

它顯示錯誤

ERROR 1064(42000):你在你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在':='k'
k',p_head:='1',p_desc:='des',p_ct_nm:='Department')'處使用線1

+0

嘗試僅傳遞參數,而不是在執行時分配它們。 – Pravellika

+0

ID帕拉姆不是過去,你打電話從p_name – StanislavL

回答

1

call uspCommonMasterInsertUpdateSingleItem (p_name := 'kk',p_head := '1',p_desc := 'des',p_ct_nm := 'Department') 

呼叫方法只要改變到

call uspCommonMasterInsertUpdateSingleItem ('kk',1,'des','Department') 

還請傳遞值爲 「P_ID」 作爲上述呼叫的方法的第一個參數

+0

開始,先生..我知道你的公司bhubeneswar。謝謝你的回答,但那不是我想要的,我有5個參數在sp中,並且想要在調用usp *時只傳遞4個參數。 – Nisar

+0

我不想傳遞p_id,請查看是否有其他條件。此sp用於兩個操作,一個用於保存,另一個用於編輯 – Nisar

+2

對於您不想傳遞p_id的操作,必須通過這是一個空值。 對於第一個參數,您必須傳遞「調用uspCommonMasterInsertUpdateSingleItem('','kk',1,'des','Department')」。 因此,它將檢查if和else條件,並處理下面語句中存在的代碼。 併爲您想要傳遞給p_id的值。在NULL值 處傳遞一個值「調用uspCommonMasterInsertUpdateSingleItem(123,'kk',1,'des','Department')」。 – Andolasoft

0

按照proc中給出的確切順序給出參數。你在執行過程中遺漏了p_id。