Jain Jose.C wrote :

>Hi,

>   I want ot add a big query into a Varchar String . I defined it 
>Varchar(8000) . but it not supporting to store 8000 characters. It throws 
>error like

>---- Error -------------------------------
>Auto Commit: On, SQL Mode: Internal, Isolation Level: Committed
>General error;-2010 POS(1) Assignment impossible, char value too long.
>call SI_SF_FINDDEPACCTBYCUST(1)

>How can i solve the problem. Please please help me...I really stuck with the 
>problem

>by
>Jain Jose.C

The problem occurred in the following db-procedure :

CREATE DBPROC SI_SF_FINDDEPACCTBYCUST
(
IN  PCUSTID FIXED(38)
)
RETURNS CURSOR
AS
VAR MYSQL VARCHAR(4000); CURSORSTR CHAR(8000);

BEGIN

SET MYSQL ='SELECT
        1 temp,
        acct.accountId,
        acct.status status,
        acpf.acctPortfolioId,
        acctPortfolioNumber,
        acctSuffixNumber,
        acctDescription,
        acctBalance,
        createTimestamp,
        updateTimestamp,
        UpdateCounter,
        la.PmtInstAmount as paymentAmount,
        la.dueDate,
        la.disbursed,
        fc.financialControlId,
        interestRate,
        pp.registered,
        pp.productCurrencyType as currency,
        fc.FinancialControlCode as ProdServiceCode,
        (SELECT LineOfCredit FROM SI_LoanProduct WHERE acct.FinancialControlId = 
SI_LoanProduct.ProductId) AS LineOfCredit,
        (SELECT OnlineAlertDays FROM SI_LoanProduct WHERE acct.FinancialControlId = 
SI_LoanProduct.ProductId) AS OnlineAlertDays,
        (SELECT OnlineRestDays FROM SI_LoanProduct WHERE acct.FinancialControlId = 
SI_LoanProduct.ProductId) AS OnlineRestDays,
        (SELECT TypeCode FROM SI_FinancialControlTypes , SI_FinancialControls
           WHERE SI_FinancialControlTypes.FinancialControlTypeId = 
SI_FinancialControls.FinancialControlTypeId
                 AND SI_FinancialControls.FinancialControlId = 
acct.FinancialControlId) AS 
AcctType,

        (SELECT CategoryCode FROM SI_FinancialControlTypes , SI_FinancialControls
           WHERE SI_FinancialControlTypes.FinancialControlTypeId = 
SI_FinancialControls.FinancialControlTypeId
                 AND SI_FinancialControls.FinancialControlId = 
acct.FinancialControlId) AS 
CategoryCode,

        (select  CHR( count(*) )  from SI_AccountAssociates aa where acct.accountId 
= aa.accountId and isDeleted!=''Y'') as acctAssocCount,
        (select count(m.accountId) from SI_Memo m, SI_BusinessDate b where 
m.customerId = 1 and m.Deleted = 0 and
                SIGN(YEAR(m.ExpiryDate) * 1000 + DAYOFYEAR(m.ExpiryDate) - 
YEAR(b.BusinessDate) * 1000 + DAYOFYEAR(b.BusinessDate)) * 
DATEDIFF(m.ExpiryDate,b.BusinessDate) >= 0 and m.accountId = acct.accountId 
and
                SIGN(YEAR(m.StartDate) * 1000 + DAYOFYEAR(m.StartDate) - 
YEAR(b.BusinessDate) * 1000 + DAYOFYEAR(b.BusinessDate)) * 
DATEDIFF(m.StartDate,b.BusinessDate) <= 0 and m.PriorityCode = ''CRIT'') as 
criticalMemo,
        (select count(m.accountId) from SI_Memo m, SI_BusinessDate b where 
m.customerId = 1 and m.Deleted = 0 and
                SIGN(YEAR(m.ExpiryDate) * 1000 + DAYOFYEAR(m.ExpiryDate) - 
YEAR(b.BusinessDate) * 1000 + DAYOFYEAR(b.BusinessDate)) * 
DATEDIFF(m.ExpiryDate,b.BusinessDate) >= 0 and m.accountId = acct.accountId 
and
                SIGN(YEAR(m.StartDate) * 1000 + DAYOFYEAR(m.StartDate) - 
YEAR(b.BusinessDate) * 1000 + DAYOFYEAR(b.BusinessDate)) * 
DATEDIFF(m.StartDate,b.BusinessDate) <= 0 and m.PriorityCode = ''HIGH'') as 
highMemo,
        (select count(m.accountId) from SI_Memo m, SI_BusinessDate b where 
m.customerId = 1 and m.Deleted = 0 and
                SIGN(YEAR(m.ExpiryDate) * 1000 + DAYOFYEAR(m.ExpiryDate) - 
YEAR(b.BusinessDate) * 1000 + DAYOFYEAR(b.BusinessDate)) * 
DATEDIFF(m.ExpiryDate,b.BusinessDate) >= 0 and m.accountId = acct.accountId 
and
                DATEDIFF(m.StartDate , b.BusinessDate) <= 0 and m.PriorityCode = 
''MED'') 
as mediumMemo,
        (select count(m.accountId) from SI_Memo m, SI_BusinessDate b where 
m.customerId = 1 and m.Deleted = 0 and
                DATEDIFF( m.ExpiryDate , b.BusinessDate) >= 0 and m.accountId = 
acct.accountId and
                DATEDIFF( m.StartDate , b.BusinessDate) <= 0 and m.PriorityCode = 
''LOW'') 
as lowMemo,
        (select count(*) from SI_StopPayment spmt where spmt.accountId = 
acct.accountId) as stopPayment,
        (select count(m.accountId) from SI_Memo m, SI_BusinessDate b where 
m.customerId = 1 and m.Deleted = 0 and
          m.RestrictionCode <> ''NONE'' and m.accountId = acct.accountId) as 
restrictions,
        (acct.acctBalance - la.CreditLimit) as overLimitAmount,
        (select rif from si_registeredPlan where registeredPlanId in (select 
registeredPlanId from si_registeredAccount where accountId = 
acct.AccountId)) as RRIF
FROM
        SI_accountPortfolios acpf,
        SI_productProperties pp,
        SI_FinancialControls fc,
        SI_Accounts acct,
        SI_LOANACCOUNT la
WHERE
        acpf.CustomerId = 1 AND
        acpf.AcctPortfolioId = acct.acctPortfolioId(+) AND
        acct.FinancialControlId = pp.ProductId AND
        fc.FinancialControlId = pp.ProductId AND
        acct.accountId = la.accountId(+) AND
        acct.deleted = 0 AND
        (la.Undone is NULL OR la.Undone = 0)' ;

        $CURSOR = 'CUSTOMER_CURSOR';
        CURSORSTR ='DECLARE ' || $CURSOR || ' CURSOR FOR ' || MYSQL;

        EXECUTE CURSORSTR;
        IF ($RC <> 0) AND ($RC <> 100) THEN STOP ($RC);

END ;

The select statement inside has a length of 4051 bytes, which does not fit into to 
variable MYSQL of length 4000.
This produces error -2010. Please define MYSQL a little bit wider, for
example 'MYSQL CHAR(4100);'.

Regards,
Thomas

-- 
Thomas Anhaus
SAP DB, SAP Labs Berlin
[EMAIL PROTECTED]
http://www.sapdb.org/
_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general


_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general

Reply via email to