Bijwerken van artikelvelden tussen Exact Online administraties geeft itgengpr040

Vraag: hoe is het mogelijk onderstaande query in Querytool uit te voeren zonder foutmelding?

Query:

--
-- Create a table mapping for items to be filled with enddate
--
create or replace table grt@inmemorystorage
as
select 
    code grt_code, 
    enddate grt_enddate
from itemsincremental
where division = 1483520
and code in (
'8720254832135', 
'8720254832081', 
'8720254832159'
)


begin

  use 1778939
  --
  -- One-by-one update the item.
  --
  for r in
  ( select *
    from   grt@inmemorystorage grt
  );
  loop
    update ExactOnlineREST.Logistics.Items
    set    enddate  = cast(r.grt_enddate as datetime)
    where  code     = to_char(r.grt_code)
    and    division = 1778939
    ;
    if sqlrowcount = 0
    then
      raise_application_error
      ( -20163
      , 'Could not update item enddate to' 
        || cast(r.grt_endate as datetime) 
        || ' for item ' 
        || to_char(r.grt_code) 
        || ' because item does not exist.'
      );
    end if;
  end loop;
end;

Foutmelding:

itgengpr040: Statement #2 'begin' beginnend op regel 20 veroorzaakte een fout.

Er is al een actieve transactie. Geneste transacties worden niet ondersteund.

Gelieve de huidige transactie terug te draaien of vast te leggen.

Bericht ID: 93bd5a07-8477-4694-9af6-6c7dbfb42f87

Opgetreden (UTC): 27-2-2023 15:53:34

begin

ValidationException
ValidationException
   bij Invantive.Basics.ValidationException..ctor(GlobalState owner, ExecutionOptions executionOptions, String messageCode, String errorMessage, String kindRequest, String localStackTrace, String nk, Exception innerException, Boolean inheritMessageCodeWhenPresent, Nullable`1 uid, Boolean isRecoverable, String poolIdentityId, String url)
   bij Invantive.Data.GenericConnectionDataProvider.BeginTransaction(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.BeginTransaction(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Data.ConnectionManager.MH(GlobalState , ExecutionOptions , String& )
   bij Invantive.Data.ConnectionManager.BeginTransaction(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Sql.V1.TransactionStatementTree.<Fetch>d__6.MoveNext()
   bij Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   bij Invantive.Sql.V1.FirehoseResultSet.HJ.MoveNext()
   bij Invantive.Sql.V1.QueryPlan.JR.MoveNext()
   bij Invantive.Data.ExtensionMethods.DBK`1.FBK.MoveNext()
   bij System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   bij System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   bij Invantive.Data.ConnectionManager.BM.U(QueryPlan )
   bij System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   bij System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   bij System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   bij Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, QueryPlan[] queryPlans, String sqlStatement, ParameterList parameters)
   bij Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   bij Invantive.Data.ConnectionManager.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   bij Invantive.Data.ActionProceduresBase.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters)
   bij Invantive.Producer.Windows.Forms.QueryToolResults.QIU(GlobalState , ExecutionOptions , IProgressNotifier , String , ParameterList , Boolean , Boolean , Boolean , Boolean )
   bij Invantive.Producer.Windows.Forms.QueryToolResults.RIU(GlobalState , ExecutionOptions , String , String , Boolean )
   bij Invantive.Producer.Windows.Forms.QueryToolResults.ExecuteStatements(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Producer.Windows.Forms.QueryToolDocumentViewModel.XL.RL.MoveNext()
   bij System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bij System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()
   bij System.Threading.ThreadPoolWorkQueue.Dispatch()
   bij Invantive.Data.GenericConnectionDataProvider.BeginTransaction(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Data.Providers.ExactOnline.ExactOnlineProvider.BeginTransaction(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Data.ConnectionManager.MH(GlobalState , ExecutionOptions , String& )
   bij Invantive.Data.ConnectionManager.BeginTransaction(GlobalState owner, ExecutionOptions executionOptions)
   bij Invantive.Sql.V1.TransactionStatementTree.<Fetch>d__6.MoveNext()
   bij Invantive.Data.CompressedEnumerable`1.<GetEnumerator>d__10.MoveNext()
   bij Invantive.Sql.V1.FirehoseResultSet.HJ.MoveNext()
   bij Invantive.Sql.V1.QueryPlan.JR.MoveNext()
   bij Invantive.Data.ExtensionMethods.DBK`1.FBK.MoveNext()
   bij System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   bij System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   bij Invantive.Data.ConnectionManager.BM.U(QueryPlan )
   bij System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   bij System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   bij System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   bij Invantive.Data.ConnectionManager.ExecuteAndCombineQueryPlansV1(GlobalState owner, ExecutionOptions executionOptions, QueryPlan[] queryPlans, String sqlStatement, ParameterList parameters)
   bij Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   bij Invantive.Data.ConnectionManager.ExecuteProviderPassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   bij Invantive.Data.ConnectionManager.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---
   bij System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   bij Invantive.Data.ConnectionManager.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters, String callSafeNameOverrule)
   bij Invantive.Data.ActionProceduresBase.PassthroughSqlActionTable(GlobalState owner, ExecutionOptions executionOptions, String actionSql, ParameterList parameters)
   bij Invantive.Producer.Windows.Forms.QueryToolResults.QIU(GlobalState , ExecutionOptions , IProgressNotifier , String , ParameterList , Boolean , Boolean , Boolean , Boolean ) in c:\smoke\ws-22.0\Invantive.Producer\src\Invantive.Producer.Windows.Forms\QueryTool\QueryToolTraceViewModel.cs:regel 17
   bij Invantive.Producer.Windows.Forms.QueryToolResults.RIU(GlobalState , ExecutionOptions , String , String , Boolean ) in c:\smoke\ws-22.0\Invantive.Producer\src\Invantive.Producer.Windows.Forms\QueryTool\QueryToolResultsViewModel.cs:regel 22

De foutmelding zal waarschijnlijk samenhangen met verkeerde PSQL-syntax die toevallig wel deels herkend wordt. Mogelijk wordt de losse begin herkend als deel van het SQL-statement begin transaction aangezien begin in SQL dit als enige betekenis kan hebben. In PSQL opent het een blok van procedure logica.

Advies is om het hele PSQL-blok in ieder geval geen witregels te laten hebben. Daarnaast om elk statement te eindigen met een puntkomma (‘;’). De reguliere schrijfwijze is hieronder aangegeven.

begin
  use 1778939;
  --
  -- One-by-one update the item.
  --
  for r in
  ( select *
    from   grt@inmemorystorage grt
  )
  loop
    update ExactOnlineREST.Logistics.Items
    set    enddate  = cast(r.grt_enddate as datetime)
    where  code     = to_char(r.grt_code)
    and    division = 1778939
    ;
    if sqlrowcount = 0
    then
      raise_application_error
      ( -20163
      , 'Could not update item enddate to' 
        || cast(r.grt_endate as datetime) 
        || ' for item ' 
        || to_char(r.grt_code) 
        || ' because item does not exist.'
      );
    end if;
  end loop;
end;

Hartelijk dank, met deze tip loopt de query als een zonnetje!

1 Like