2016-01-20 81 views
-3

我在存储过程中的下列问题:存储过程select返回“操作数应包含1列”

BEGIN 

    declare docId int(11); 
    declare sendingUserVar varchar(100); 
    declare accountManagerVar varchar(100); 
    declare ppp varchar(100); 
    declare zzz varchar(100); 
     declare varTotalNat double(10,2); 
     declare varStageName varchar(50); 
     declare varAccountId varchar(50); 
     declare varCompanyName varchar(500); 
     declare varClientName varchar(500); 
     declare varPhone varchar(500); 
     declare varEmail varchar(500); 
     declare varBillingCity varchar(500); 
     declare varBillingCountry varchar(500); 
     declare varBillingState varchar(500); 


    declare docCursor cursor for select documentId FROM Export.Document; 

    open docCursor; 

    start_loop: loop 

     fetch docCursor into docId; 
     select docId; 

     SELECT SUM(total) INTO varTotalNAT FROM DocumentItem WHERE documentId = docId; 
     SELECT AccountId, StageName, CreatedById, OwnerId 
      INTO varAccountId, varStageName, sendingUserVar, accountManagerVar 
      FROM sfExport.Opportunity WHERE Opportunity_Number__c = docId LIMIT 1; 

     SELECT Name, Phone, Site_Visit_Notes__c, BillingCity, BillingCountry, BillingState 
      INTO varCompanyName, varPhone, varEmail, varBillingCity, varBillingCountry, varBillingState 
      FROM sfExport.Account WHERE Id = varAccountId LIMIT 1; 

     SELECT Name INTO varClientName FROM sfExport.Contact WHERE AccountId = varAccountId LIMIT 1; 

     UPDATE Export.Document 
     SET 
     totalNAT = varTotalNAT, 
     stage = varStageName, 
     sendingUser = sendingUserVar, 
     accountManager = accountManagerVar, 
     companyName = varCompanyName, 
     name = varClientName, 
     phone = varPhone, 
     email = varEmail, 
     city = varBillingCity, 
     physicalCountry = varBillingCountry, 
     physicalState = varBillingState 
     WHERE documentId = docId; 

     select('a row processed',docId); 

    end loop; 
    close docCursor; 

END 

每当我把这个存储过程,我得到ERROR 1241 (21000): Operand should contain 1 column(s)。现在的问题是: “为什么?”,因为我对所有的 “子查询”

回答

1

使用CONCAT LIMIT 1集*

select CONCAT('a row processed',docId); 

或给予2列回

select 'a row processed',docId; 
+0

这是最愚蠢的错字我迄今为止...大声笑thanx –