{"id":1193,"date":"2016-07-20T11:46:42","date_gmt":"2016-07-20T09:46:42","guid":{"rendered":"http:\/\/www.pitss.org\/blog\/?p=1193"},"modified":"2018-04-03T18:26:38","modified_gmt":"2018-04-03T16:26:38","slug":"instead-of-trigger-ora-02014-adf-und-select-for-update","status":"publish","type":"post","link":"https:\/\/pitss.org\/de\/instead-of-trigger-ora-02014-adf-und-select-for-update\/","title":{"rendered":"Instead-of Trigger, ORA-02014, ADF und select for update"},"content":{"rendered":"<p>Google und die Oracle Support und Community Seiten sind voll von Hinweisen zu ORA-02014 (cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.), aber es waren viele Holzwege dabei, als es galt, die Ursache f\u00fcr den Fehler zu finden. Da es vermutlich kein Einzelfall ist, m\u00f6chten wir die gefundenen Informationen hier zusammentragen:<\/p>\n<p><strong>Ausgangslage<\/strong><br \/>\nIn der Datenbank wird ein Join \u00fcber mehrere Tabellen incl. Instead-of-Trigger angelegt. Auf diesen View wird in <a href=\"https:\/\/pitss.org\/de\/oracle-application-development-framework\/\">ADF<\/a> ein Entity-Object erstellt. Beim Versuch mit dem Model-Tester Daten zu \u00e4ndern erscheint der Fehler ORA-02014.<br \/>\nDie View kann in der Datenbank definitiv mit DML-Statements\u00a0genutzt werden und enth\u00e4lt auch keine DISTINCT, GROUP BY, UNION, etc.<\/p>\n<p><strong>Ursache<\/strong><br \/>\nAuch die analytischen Funktionen RANK, LAG, LEAD, ROWNUM, etc. verhindern, dass auf dem View das Statement SELECT for UPDATE abgesetzt werden kann.<br \/>\nDer Instead-of Trigger ist nicht in der Lage auf das Select .. for update zu reagieren. ADF setzt beim ersten Schreiben eines Wertes in ein Attribut des Entity-Objects ein Select for update ab.<\/p>\n<p><strong>L\u00f6sung<br \/>\n<\/strong>Die <em>billige<\/em> L\u00f6sung ist nat\u00fcrlich, das Rank in diesem Fall durch eine andere Alternative in dem View abzul\u00f6sen. Auf der anderen Seite besteht die M\u00f6glichkeit, das Lock-Verhalten von ADF zu \u00e4ndern. Dazu bietet ADF die M\u00f6glichkeit, am Entity-Object die EntityImpl zu erweitern:<\/p>\n<p>Wird hier die super.lock() Methode \u00fcberschrieben und im Gegenzug eine Package-Funktion in der Datenbank aufgerufen, die ein select for update \u00fcber einen Prim\u00e4rschl\u00fcssel durchf\u00fchrt, kann auch der View mit analytischen Funktionen in ADF f\u00fcr DML-Statements genutzt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google und die Oracle Support und Community Seiten sind voll von Hinweisen zu ORA-02014 (cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.), aber es waren viele Holzwege dabei, als es galt, die Ursache f\u00fcr den Fehler zu finden. Da es vermutlich kein Einzelfall ist, m\u00f6chten wir die gefundenen Informationen hier zusammentragen: Ausgangslage [&hellip;]<\/p>\n","protected":false},"author":45,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[19,185,83,81],"tags":[],"class_list":["post-1193","post","type-post","status-publish","format-standard","hentry","category-all-about-adf","category-database","category-oracle","category-tech-blog"],"_links":{"self":[{"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/posts\/1193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/comments?post=1193"}],"version-history":[{"count":4,"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/posts\/1193\/revisions"}],"predecessor-version":[{"id":22326,"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/posts\/1193\/revisions\/22326"}],"wp:attachment":[{"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/media?parent=1193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/categories?post=1193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pitss.org\/de\/wp-json\/wp\/v2\/tags?post=1193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}