【问题标题】:Stored procedure select returns "Operand should contain 1 column"存储过程选择返回“操作数应包含 1 列”
【发布时间】:2016-01-20 12:05:41
【问题描述】:

我的存储过程有以下问题:

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)。问题是“为什么?”,因为我在所有“子查询”上都设置了LIMIT 1

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    使用 CONCAT*

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

    或将 2 列返回

     select 'a row processed',docId;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 2020-02-24
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多