Gibt es eine Größenbeschränkung für den SQL-Text in einem People App Engine SQL Schritt / Aktion?

StackOverflow https://stackoverflow.com/questions/1739622

Frage

Ich erhalte die folgende Fehlermeldung: AeSymResolveStatement [775] ... Meta-SQL-Fehler bei oder in der Nähe von Position 34338 in Anweisung (108.512). Die SQL-Anweisung selbst ist mehr als 40.000 Zeichen lang, daher die Frage.

Die DB ist Oracle. Laufen auf Werkzeuge 8.49.24.

War es hilfreich?

Lösung

Es gibt keine solche Grenze.

Sie können sich dies bestätigen, indem eine SQL wie das Erstellen:

select 'x' from PS_INSTALLATION where 
      1 = 1 and 
      1 = 1 and
      1 = 1 and
      1 = 1 and
      /* ... copy paste '1 = 1 and' 90000 times or so times more */
      1 = 1

Obwohl es pside macht ziemlich langsam, es spart und validiert gut.

Andere Tipps

Ich weiß, dass es eine Grenze für die Größe des in einer Application Engine (SQL Step) verwendet SQL ist. Ich hatte einmal einen ähnlichen Fehler erhalte bei dem Versuch, eine außergewöhnlich lange SQL in einer Application Engine zu verwenden.

Ich wäre nicht überrascht, wenn die gleiche Grenze zu SQL gilt Objekte.

Um das Problem zu beheben, konnte ich die SQL in 2 teilen (war eine Update-Anweisung). Hoffentlich ist möglich, in Ihrem Fall auch.

Es gibt Grenzen innerhalb Peoplecode, vor allem aufgrund der Grenzen auf String-Länge, aber ich habe noch nie eine Grenze für gespeicherte SQL-Anweisungen gefunden.

persönlich an Ich würde schauen die Aussage in Stücke in irgendeiner Art und Weise zu brechen.

Sie könnten:

  • Mit dem eingebauten Schleifen Mechanismus der App Engines
  • Verwenden Sie eine Mischung aus SQL und People
  • eine temporäre Tabelle und Zwischen SQLs zuführen, in der temporären Tabelle speichert

Neben der Datenbank ein Herz Anfall geben, nicht die Erwähnung die DBA, wenn er die Anweisung im SQL-Monitor sieht. Sparen Sie sich eine Welt der Schmerz, wenn Sie jemals wieder auf die Erklärung suchen.

Ich denke, die SQLs in App Motoren werden als Long-Positionen gespeichert werden, so wäre es 4GB unter Oracle, etwas ähnlich groß unter DB2 sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top