Mehr

Wie lege ich eine bestimmte ArcSDE-Version für die tabellarische Berichterstellung fest?

Wie lege ich eine bestimmte ArcSDE-Version für die tabellarische Berichterstellung fest?


Ich habe eine Ansicht mit mehreren Versionen in Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production erstellt. Ich kann mit einem SQL-Skript in SQL Developer auf eine bestimmte Version zugreifen. Mit anderen Tools kann ich jedoch nur auf DEFAULT zugreifen.

Das folgende Skript funktioniert einwandfrei:

call sde.version_util.set_current_version('MY_VERSION'); wähle * aus mv_my_view;

Die Kapselung dieser Logik in einer Oracle-Ansicht (etwas, das der Antwort von Jay Cummins auf diese Frage ähnelt, wäre eine großartige Lösung, aber ich sehe keine Möglichkeit, einen Aufruf in eine Ansicht einzufügen).

In Crystal Reports kann ich SDE.VERSION_UTIL.SET_CURRENT_VERSION als Tabelle hinzufügen, aber nicht zum Festlegen der Version verwenden. Wenn ich eine als funktionierend bekannte Version angebe, erhalte ich einen Abfrage-Engine-Fehler: "Fehlermeldung vom Server kann nicht abgerufen werden."

Wenn ich dagegen eine nicht vorhandene Version angebe (z. B. mit einem Tippfehler), erhalte ich 'HY000:[Oracle][ODBC][ORA]ORA-2026: Version x not found… ORA-06512'

Wie kann ich die aktuelle Version für tabellarische Berichtszwecke auf einen anderen Wert als DEFAULT setzen - entweder in einer Oracle-Ansicht, mit Crystal Reports oder mit einem anderen Tool?


Der Schlüssel besteht darin, eine Funktion zu erstellen, die eine Ergebnismenge zurückgibt, die wie eine Tabelle abgefragt werden kann. Fügen Sie in die Funktion einen Aufruf an . einset_current_version(siehe Zeile 6 unten).

SQL> create type emp_obj is object (empno number, ename varchar2(10)); 2 / Typ erstellt. SQL> create type emp_tab ist die Tabelle von emp_obj; 2 / Typ erstellt. SQL> Funktion erstellen oder ersetzen all_emps return emp_tab 2 ist 3 l_emp_tab emp_tab := emp_tab(); 4 n ganze Zahl := 0; 5 begin 6 sde.version_util.set_current_version('ALT_VERSION') 7 for r in (wähle empno, ename von emp) 8 loop 9 l_emp_tab.extend; 10n :=n + 1; 11 l_emp_tab(n) := emp_obj(r.empno, r.ename); 12 Endschleife; 13 return l_emp_tab; 14 Ende; 15 / Funktion erstellt. SQL> Ansicht erstellen oder ersetzen ALT_VER_VIEW als select empno, ename from table (all_emps); Ansicht ALT_VER_VIEW erstellt. SQL> select * from alt_ver_view; EMPNO ENAME ---------- ---------- 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7902 FORD 7934 MILLER