Subject Re: [firebird-support] Implementation limit exceeded.: block size exceeds implementation restriction.
Author Helen Borrie
At 08:25 PM 6/09/2007, you wrote:
>This a typical "but I don't have changed anything" case. I have query,
>which has been working for years and now I get the error:
>
>Unsuccessful execution caused by an unavailable resource.
>Implementation limit exceeded.
>block size exceeds implementation restriction.
>
>The statement is definitely not bigger than 64KB. I run FB 1.5 on
>Windows XP. Here's the statement:
>
>insert into PRODUCTS
>(PCID,PCPAID,PCMPID,PCSPID,PCGEID,PCPUID,PCUNID1,PCUNID2,
>PCRTID,PCCCID,PCMNID1,PCMNID2,PCPGID,PCNR,PCNAME1,PCUPC,PCAVAILABILITY,PCDELIVERYQUANTITY,
>PCPACKETQUANTITY,PCCOPYPROTECTION,
>PCTRANSFERPRICE,PCNETPRICE,PCLISTPRICE,PCRRP,
>PCTRANSFERPRICE_CC,PCNETPRICE_CC,PCLISTPRICE_CC,PCRRP_CC,
>PCDAYONE,PCLIFETIME,PCTARGETRELEASEDATE,PCACTUALRELEASEDATE,PCDELIVERYTIME,PCBUNDLE,
>PCDYNAMICFORECAST,PCFORECAST1,PCFORECAST2,PCFORECAST3,PCFORECAST4,PCFORECAST5,PCFORECAST6,
>PCFORECAST7,PCFORECAST8,PCFORECAST9,PCFORECAST10,PCFORECAST11,PCFORECAST12,
>PCCOMMISSION,PCCOMMISSIONYEAR,
>PCAMNESTY,PCAMNESTYYEAR,PCPRICEGROUP,
>PCUKID,PCCOMMISSION_BUNDLE,PCCOMMISSION_PERFORMANCE1,PCCOMMISSION_PERFORMANCE2,
>PCCOMMISSION_PERFORMANCE3,PCCOMMISSION_FACTOR1,PCCOMMISSION_FACTOR2,
>PCCOMMISSION_FACTOR3,PCACTIVE,PCONEFORECAST,PCSTRATEGYBONUSQUANTITY,
>PCSB_ONLY_RELEASEMONTH,PCSB_FROM_YEAR,PCSB_UNTIL_YEAR,
>PCSB_FROM_MNID,PCSB_UNTIL_MNID,PCMINSTOCKQUANTITY,PCMINORDERQUANTITY,
>PCIGNOREATFORECASTSPLITBUNDLES,PCCANCELED,PCPOID400,PCPOID500,PCPOID600,
>PCCommissionUseWidthDistr,PCCommissionMinWidthDistr,PCCommissionMinSales,
>PCCOMMISSIONWIDTHDISTRFORALLUS,PCVisible)
>values
>(:PCID ,:PCPAID ,:PCMPID ,:PCSPID ,:PCGEID ,:PCPUID ,:PCUNID1
>,:PCUNID2 ,
>:PCRTID ,:PCCCID ,:PCMNID1 ,:PCMNID2 ,:PCPGID ,:PCNR ,:PCNAME1
>,:PCUPC ,:PCAVAILABILITY ,:PCDELIVERYQUANTITY ,
>:PCPACKETQUANTITY ,:PCCOPYPROTECTION ,
>(select RESULT1 from P_CALCULATE_CC_TO_EURO(:PCTRANSFERPRICE
>,NULL,NULL,NULL,NULL)),
>(select RESULT1 from P_CALCULATE_CC_TO_EURO(:PCNETPRICE
>,NULL,NULL,NULL,NULL)),
>(select RESULT1 from P_CALCULATE_CC_TO_EURO(:PCLISTPRICE
>,NULL,NULL,NULL,NULL)),
>(select RESULT1 from P_CALCULATE_CC_TO_EURO(:PCRRP ,NULL,NULL,NULL,NULL)),
>:PCTRANSFERPRICE_CC ,:PCNETPRICE_CC ,:PCLISTPRICE_CC ,:PCRRP_CC ,
>:PCDAYONE ,:PCLIFETIME ,:PCTARGETRELEASEDATE ,
>:PCACTUALRELEASEDATE ,:PCDELIVERYTIME ,:PCBUNDLE ,:PCDYNAMICFORECAST
> ,:PCFORECAST1 ,:PCFORECAST2 ,
>:PCFORECAST3 ,:PCFORECAST4 ,:PCFORECAST5 ,:PCFORECAST6 ,:PCFORECAST7
> ,:PCFORECAST8 ,:PCFORECAST9 ,
>:PCFORECAST10 ,:PCFORECAST11 ,:PCFORECAST12 ,:PCCOMMISSION
>,:PCCOMMISSIONYEAR ,
>:PCAMNESTY ,
>:PCAMNESTYYEAR ,:PCPRICEGROUP ,:PCUKID ,:PCCOMMISSION_BUNDLE ,
>:PCCOMMISSION_PERFORMANCE1 ,:PCCOMMISSION_PERFORMANCE2 ,
>:PCCOMMISSION_PERFORMANCE3 ,:PCCOMMISSION_FACTOR1
>,:PCCOMMISSION_FACTOR2 ,
>:PCCOMMISSION_FACTOR3 ,:PCACTIVE ,:PCONEFORECAST
>,:PCSTRATEGYBONUSQUANTITY ,
>:PCSB_ONLY_RELEASEMONTH ,:PCSB_FROM_YEAR ,:PCSB_UNTIL_YEAR ,
>:PCSB_FROM_MNID ,:PCSB_UNTIL_MNID ,:PCMINSTOCKQUANTITY
>,:PCMINORDERQUANTITY ,
>:PCIGNOREATFORECASTSPLITBUNDLES ,:PCCANCELED ,:PCPOID400 ,:PCPOID500
> ,:PCPOID600 ,
>:PCCommissionUseWidthDistr ,:PCCommissionMinWidthDistr
>,:PCCommissionMinSales ,
>:PCCOMMISSIONWIDTHDISTRFORALLUS ,:PCVisible )
>
>Any ideas, what can cause the error?

Do you have users suddenly passing larger values to their text
parameters lately, than they did before?

The total length of the statement is not the same as the total length
of your statement as you show it here (nor, indeed, as it is when it
passes through the API at prepare time, where your Delphi-style named
and colon-prefixed placeholders are replaced by questionmarks).

Figure out the potential "blowout length" of an instance of your
statement (in bytes) when you have actual VALUES assigned to those
placeholders, not forgetting to count the single-quote delimiters for
the strings....

./heLen