PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] geschachtelte SELECTs


Kennung Eins
2006-03-27, 16:41:04
Hallo,

ist es irgendwie möglich, in einer einzelnen Zelle einer SQL-Abfrage eine komplette Sub-Tabelle anzuzeigen? Diese Sub-Tabelle hätte nur eine Spalte.

Also sozusagen

SELECT x,
(SELECT TABLE2.y FROM TABLE2,xx WHERE xx.xx=TABLE2.xx) as "y",
z
FROM TABLE1
WHERE ...


Bei Oracle 10g gibts ein COLLECT-Statement, was mir danach aussieht, als ob es das tut, was ich will - aber das krieg ich nicht eingebunden.
Oder CURSOR .. krieg ich ebenfalls nicht hin.

Geht das überhaupt in einer relationalen DB?

Coda
2006-03-27, 17:14:44
Natürlich geht sowas, hier z.B. für MySQL: http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

Kennung Eins
2006-03-27, 17:24:28
Ich weiß nicht, ob du verstanden hast, was ich meine. Das Subqueries gehen, ist klar. Jedoch kriege ich einen "ORA-01427: single-row subquery returns more than one row"-Fehler, weil meine Subquery ein mehrzeiliges Ergebnis liefert.

Und das ist ja auch gewollt! Ich möchte in meiner Ergebnis-Tabelle in einer Zelle (nicht Zeile!) mehrere Werte stehen haben.

darph
2006-03-27, 19:57:02
Und das ist ja auch gewollt! Ich möchte in meiner Ergebnis-Tabelle in einer Zelle (nicht Zeile!) mehrere Werte stehen haben.Öhm... das geht? Ich dachte relationale Datenbanken sind immer in 1. Normalform?

5tyle
2006-03-27, 22:05:19
mit sowas hier? http://de.wikipedia.org/wiki/Objektorientiertes_Datenbankmodell

Das geht natürlich auch mit Oracle. Da kann man eine Tabelle anlegen, dessen
Spaltentyp die Struktur einer anderen Tabelle ist.

bsp:

select h_alias.attribute, nested_alias.attribute
from haupttab h_alias, table (h_alias.nested_table_column) nested_alias;
(man beachte das table statement, hier können aber probleme entstehen durch zb. nvl)

ansonsten kann man ja auf pl/sql zurückgreifen

Kennung Eins
2006-03-27, 23:16:40
Danke schonmal.
PL/SQL steht zur Verfügung. Wie geht das damit?

Das Ergebnis der SQL-Anfrage soll in eine HTML-Tabelle geschrieben werden. Ich benutze HTMLDB, da geschieht das automatisch. Nur noch als Ergänzung :)

Gast
2006-03-28, 08:58:09
Was speziell spricht denn gegen einen Join?

Kennung Eins
2006-03-28, 09:15:18
Bei einem "simplen" join kriege ich den oben genannten Fehler: "ORA-01427: single-row subquery returns more than one row"-Fehler, weil meine Subquery ein mehrzeiliges Ergebnis liefert.

nefu
2006-03-28, 12:09:31
Verstehe ich das Ganze wie folgt richtig :

Es gibt zwei Tabellen z.B. ein Kurs- und eine Teilnehmertabelle :

scott@SPIELDB> select * from kurstab;

KURSNR KURSTITEL
---------- ------------------------------
1 Kurs01
2 Kurs02
3 Kurs03
4 Kurs04

4 Zeilen ausgewählt.

scott@SPIELDB> select * from teilnehmer;

NAME KURSNR
------------------------------ ----------
Müller 1
Maier 1
Schulze 1
Schmitt 2
Krause 2
Bauer 3
König 3

7 Zeilen ausgewählt.

scott@SPIELDB>


... und es soll jetzt pro Kurs die Kursnr., der Kurstitel und alle Teilnehmern aufgelistet werden, allerdings auch alle Teilnehmer in einer Zeile?


PL/SQL:
scott@SPIELDB> DECLARE
2 --
3 CURSOR cur_kurs IS
4 SELECT kursnr, kurstitel from kurstab;
5 -- Typdeklaration
6 TYPE namen_typ is table of teilnehmer.name%TYPE;
7 namen_tab namen_typ;
8 --
9 l_ergebnis varchar2(1000);
10 --
11 BEGIN
12 --
13 FOR kurstab_rec in cur_kurs LOOP
14 SELECT name
15 BULK COLLECT INTO namen_tab FROM teilnehmer t where
16 t.kursnr = kurstab_rec.kursnr;
17 l_ergebnis := kurstab_rec.kursnr || ' * ' || kurstab_rec.kurstitel || ' * ';
18 IF namen_tab.COUNT = 0 THEN
19 l_ergebnis := l_ergebnis || 'NIX';
20 ELSE
21 FOR i in namen_tab.FIRST .. namen_tab.LAST
22 LOOP
23 l_ergebnis := l_ergebnis || namen_tab(i) || ' / ';
24 END LOOP;
25 END IF;
26 DBMS_OUTPUT.PUT_LINE(l_ergebnis);
27 END LOOP;
28 END;
29 /
1 * Kurs01 * Müller / Maier / Schulze /
2 * Kurs02 * Schmitt / Krause /
3 * Kurs03 * Bauer / König /
4 * Kurs04 * NIX

PL/SQL-Prozedur wurde erfolgreich abgeschlossen.

scott@SPIELDB>


oder arbeitest Du schon mit varrays/nested tables?
So ganz klar ist mir das nämlich noch nicht.

Gruß!

nefu

Gast
2006-03-28, 12:21:44
Ich habe noch ein wenig gebastelt, aber bekomme den Fehler :

"Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA-24344: success with compilation error"


Ich finde den Fehler nicht...

CREATE TYPE T_DV_TYPE AS TABLE OF VARCHAR2(4000);
SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, T_DV.DEFAULT_VALUE
FROM T_DEFAULT_VALUES, TABLE (CAST(T_DEFAULT_VALUES.DEFAULT_VALUE AS T_DV_TYPE)) T_DV, T_PARAMETER
WHERE T_DEFAULT_VALUES.PARAMETER_ID = T_PARAMETER.PARAMETER_ID;

Gast
2006-03-28, 12:27:17
@nefu:

Wir erhalten mit unserer Anfrage unterschiedlich Große Ergebnisse, je nachdem wie sich die DB ändert...
z.Z. sind es beispielsweise 5 oder 11 für 2 verschiedene Bedingungen...
Dies sind Varchar2 die dann in einem Eintrag des Reports von HTMLDB einfach untereinander aufgelistet werden sollen.(siehe Bild oben)
Es würde gehen diese Einträge statisch zu verknüpfen, aber dann würde die Dynamik der Db nicht beachtet werden.

Gast
2006-03-28, 12:37:06
Was mir gerade noch aufgefallen ist...
Wenn ich mich nicht vertue, dann ist auch noch ein Problem, daß BULK COLLECT INTO nicht in einer Sub-Query funktioniert. Diesen Fehler hatte ich, als ich es versucht hatte damit zu machen...
Und wenn ich richtig liege, dann wird es als Sub-Query für den Report gebraucht.

nefu
2006-03-28, 12:48:55
Das BULK COLLECT INTO ... funktioniert nur in einer PL/SQL Prozedur (wie oben).
HTMLDB (bzw Application Express) kenne ich nur dem Namen nach, nicht aus der Praxis.
Gibt es die Möglichkeit, die Tabelle (in meinem Beispiel namen_tab) als eine Art 'lokale Variable' anzulegen, mit einem SELECT zu füllen, und dann anzuzeigen?
Hilfreich wäre z.B., ein DESCRIBE auf die verwendeten Tabellen, denn die Datenstruktur in Deiner Anwendung ist mir nicht restlos klar.

Gruß!

nefu

Gast
2006-03-28, 12:54:49
Es gibt auf jeden Fall die Möglichkeit versteckte Variablen in der Oberfläche zu erzeugen deren Wert man auch anzeigen lassen kann in einem Report.
Aber ich hatte bisher das Problem, daß diese für unterschiedliche Zeilen aktualisiert werden mußten...da diese mehrmalig in dem Report abgefragt werden muß.
Ich weiß nun nicht in wie weit man mit PL/SQL darauf zugreifen kann, um diese für jede Zeile zu aktualisieren.

Gast
2006-03-28, 12:56:07
In wie weit das mit einer Tabelle geht muß ich prüfen...
Man kann eine solche Variable mit einer SQL Anfrage füttern, das geht auf jeden Fall.

nefu
2006-03-28, 13:04:09
Hat Du Dich schon mal im Oracle Techology network umgesehen, ob es für Deinen Fall brauchbare Tipps gibt?

http://www.oracle.com/technology/products/database/application_express/index.html

Gruß!

Nefu

Gast
2006-03-28, 13:17:44
Hatte bissel rumgeguckt, aber nix gefunden, was für den Fall gwesenen wäre oder funktioniert hätte.

nefu
2006-03-28, 13:43:28
Hier wird mit collections in HTMLDB gearbeitet :

http://www.oracle.com/technology/products/database/application_express/howtos/tabular_form.html

Thema : Build Tabular Forms for Multi-Row Operations

und ein interessanter Beitrag zum Thema 'nested collections' :

http://www.oracle.com/technology/oramag/oracle/02-may/o32plsql.html

(letzteres nicht spezifisch für HTMLDB).

Vielleicht hilft Dir das für Deine Anwendung?

Viel Erfolg!

nefu

Edit :

Der Forumsbeitrag könnte auch passen, unter der Voraussetzung, daß das Datenmodell so ähnlich ist, wie in meinem kleinen Beispiel :

http://forums.oracle.com/forums/thread.jspa?threadID=373454&tstart=45

Kennung Eins
2006-03-28, 14:18:26
Verstehe ich das Ganze wie folgt richtig :

Es gibt zwei Tabellen z.B. ein Kurs- und eine Teilnehmertabelle :

... und es soll jetzt pro Kurs die Kursnr., der Kurstitel und alle Teilnehmern aufgelistet werden, allerdings auch alle Teilnehmer in einer Zeile?

oder arbeitest Du schon mit varrays/nested tables?
So ganz klar ist mir das nämlich noch nicht.

Gruß!

nefu
Der Gast ist übrigens ein Kollege von mir :)

Ja, es soll sowas rauskommen:

KURSNR KURSTITEL NAMEN
---------- ------------------------------
1 Kurs01 Müller Maier Schulze
2 Kurs02 Schmitt Krause
3 Kurs03 Bauer König
4 Kurs04

4 Zeilen ausgewählt.

Wir arbeiten weder mit Nested Tables noch mit VARRAYS. Die Datenbank steht, da dürfen wir nichts mehr ändern.

Dein Code sieht cool aus, ich bin aber grade nicht am Platz und daher kann ich nicht testen/mit Kollegen sprechen. Aber mal ins Forum schauen :)

Sioras
2006-03-28, 14:39:53
Also ich hab mal ein wenig gebastelt, aber bekomme eben nen misteriösen Fehler...
Ich schicke Dir meinen Code per Mail, ich muß leider Schluß machen, da ich heute doch noch ins Schwabenland abreise!

MfG Sio

PS: Hab mich auch mal angemeldet :D

nefu
2006-03-28, 14:56:00
Dann dürfte der von mir am Ende verlinkte Forumsbeitrag doch passen (Master / Detail Tabellen mit unterschiedlicher Anzahl von Detail Sätzen pro Satz in der Master Tabelle)

Bin zwar wie gesagt kein HTMLDB Praktiker aber realisiert wurde das dann wohl wie im HTMLDB User's Guide unter
Rendering HTML Using Custom PL/SQL
beschrieben wird :

If you need to generate specific HTML content not handled by Oracle HTML DB
forms, reports, and charts, you can use the region type PL/SQL. To generate HTML in
this type of region, you need to use the PL/SQL Web Toolkit. You can reference session
state using bind variable syntax. Keep in mind that when you generate HTML in this
way you do not get the same consistency and control provided with templates.
See Also:
■ Oracle Database Application Developer's Guide - Fundamentals for
information about developing Web applications with PL/SQL
■ Oracle Database PL/SQL Packages and Types Reference for
information about htp package

To give you more control over HTML dynamically generated within a region, you can
use PL/SQL. For example, to print the current date you could create a region with the
following source:
htp.p(TO_CHAR(SYSDATE,'Day Month DD, YYYY'));
This next example accesses tables:

DECLARE
l_max_sal NUMBER;
BEGIN
SELECT max(sal) INTO l_max_sal FROM emp;
htp.p('The maximum salary is: '||TO_CHAR(l_max_sal,'999,999.00'));
END;

Das sieht ja so aus, als könnte man auf diese Weise mit den entsprechenden loop statements den HTML Code so generieren, wie man's braucht?!

Gruß!

nefu

Kennung Eins
2006-03-28, 16:19:39
Danke, ich setz mich nachher nochmal ran, wenn ich zurück bin .. dann gibts ergebnisse

Kennung Eins
2006-03-28, 18:44:41
cool, prinzipiell funktioniert das:

DECLARE
CURSOR cur_tparam IS
SELECT PARAMETER_ID, DESCRIPTION from T_PARAMETER;
TYPE namen_typ is table of T_DEFAULT_VALUES.DESCRIPTION%TYPE;
namen_tab namen_typ;

l_ergebnis varchar2(4000);

BEGIN
FOR tdefval_rec in cur_tparam LOOP
SELECT DESCRIPTION
BULK COLLECT INTO namen_tab FROM T_DEFAULT_VALUES t where
t.PARAMETER_ID = tdefval_rec.PARAMETER_ID;
l_ergebnis := '<hr>'|| tdefval_rec.PARAMETER_ID || '<br>' || tdefval_rec.DESCRIPTION || ' <br> ';
IF namen_tab.COUNT = 0 THEN
l_ergebnis := l_ergebnis || 'NIX';
ELSE
FOR i in namen_tab.FIRST .. namen_tab.LAST
LOOP
l_ergebnis := l_ergebnis || namen_tab(i) || '<br>';
END LOOP;
END IF;
htp.p(l_ergebnis);
END LOOP;
END;

Jedoch nur, wenn ich es nicht in meiner "großen" Anfrage benutze. :(
Die große Anfrage ist im Moment in HTMLDB als "SQL-Anfrage" gekennzeichnet (nicht als "PL/SQL (Anonymer Block)") und sieht so aus (nicht erschrecken :) ):

SELECT T_PARAMETER.PARAMETER_ID as "ID",
HTMLDB_ITEM.CHECKBOX(10,T_PARAMETER.PARAMETER_ID,'CHECKED') as "ID Holder",
(
CASE
WHEN T_PARAMETER.MANDATORY = 0 THEN 'optional'
ELSE '<b>required</b>'
END
) "Mandatory",
HTMLDB_ITEM.HIDDEN(4,'[$ID$]'||T_PARAMETER.PARAMETER_ID)||
(
CASE
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 2 THEN htmldb_item.select_list(4,'- select -','TRUE,FALSE','','readonly')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_5_2.DEFAULT_VALUE FROM V_DEFAULT_VALUE_5_2, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_5_2.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_5_2.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_5_3.DEFAULT_VALUE FROM V_DEFAULT_VALUE_5_3, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_5_3.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_5_3.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_5_4.DEFAULT_VALUE FROM V_DEFAULT_VALUE_5_4, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_5_4.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_5_4.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_6_2.DEFAULT_VALUE FROM V_DEFAULT_VALUE_6_2, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_6_2.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_6_2.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_6_3.DEFAULT_VALUE FROM V_DEFAULT_VALUE_6_3, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_6_3.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_6_3.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_6_4.DEFAULT_VALUE FROM V_DEFAULT_VALUE_6_4, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_6_4.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_6_4.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 6 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
ELSE htmldb_item.text(4,'')
END
) "Value",
(SELECT T_DEFAULT_VALUES.DESCRIPTION FROM T_DEFAULT_VALUES WHERE T_DEFAULT_VALUES.PARAMETER_ID = T_PARAMETER.PARAMETER_ID) as "Value Description(s)",
T_PARAMETER_TYPE.NAME as "Parameter Type Name",
T_PARAMETER_TYPE.DESCRIPTION as "Parameter Type Description"
FROM T_HAS_PARAMETERS, T_PARAMETER, T_DATATYPE, T_PARAMETER_TYPE
WHERE T_HAS_PARAMETERS.TOOL_ID = :TOOL_SELECTION_CB
AND T_PARAMETER.PARAMETER_ID = T_HAS_PARAMETERS.PARAMETER_ID
AND T_DATATYPE.DATA_TYPE_ID = T_PARAMETER.DATA_TYPE_ID
AND T_PARAMETER.PARAMETER_TYPE_ID = T_PARAMETER_TYPE.PARAMETER_TYPE_ID
AND NOT ((T_DATATYPE.DATA_TYPE_ID = 6) AND ((T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8)))
ORDER BY T_PARAMETER.MANDATORY DESC;
Mittels der fett markierten Zeile wollte ich nun alle T_DEFAULT_VALUES.DESCRIPTION, die zu der ParameterID der äußeren SELECT Anfrage passen, in eine Zelle pasten.

Zum Thema PL/SQL:
Wenn ich den Code (unverändert) einfach auf "PL/SQL (Anonymer Block)" ändere, kriege ich komische Fehler:

ORA-06550: Zeile 2, Spalte 1: PLS-00428: In dieser SELECT-Anweisung wird eine INTO-Klausel erwartet

Hast du eine Ahnung, woher dieser Fehler kommt? Wenn ich den wegbekomme und das somit erfolgreich als PL/SQL benutzen kann, dann kann ich ja das BULK COLLECT / den CURSOR wie in deinem funktionierenden Beispiel benutzen.

nefu
2006-03-28, 20:07:13
Hui, das sieht ja imposant aus!
Ich fürchte, in dieses komplexe Abfragekonstrukt lässt sich nicht so einfach ein anonymer Block einbauen.
Als Schuß ins Blaue (ich kann nur hoffen, daß das klappt):
Aus dem anonymen Block ein Package machen, das T_PARAMETER.PARAMETER_ID übergeben bekommt, und einen varchar2 Wert zurückgibt, der die zusammenkompressten Werte enthält (l_ergebnis so gefüllt, wie in deinem Beispiel)
Die fett markierte Zeile müßte dann etwa heissen :

(SELECT PACKAGE_NAME.PACKAGE_METHODE(T_PARAMETER.PARAMETER_ID) FROM DUAL) as "Value Description(s)",

Im Package würde dann nur noch das BULK COLLECT gemacht (der Cursor wird ja nicht mehr benötigt), und die in der Tabelle zurückgelieferten Werte in das Ergebisfeld komprimiert.

Ich hoffe, ich habe Deine SQL-Anfrage richtig verstanden :redface:

Gruß!

nefu

Kennung Eins
2006-03-28, 21:31:39
oi, na das wäre doch eine Lösung, das klingt vielversprechend!! :)
Wie erstellt man ein Package? Bzw. "wo" erstelle ich es? Auf der DB? Wenn das klappt kriegst du n Bier wenn du nahe Magdeburg wohnst :)

nefu
2006-03-28, 21:39:14
Vielleicht sollte ich anhand meiner beiden Beispieltabellen erläuern, wie ich das meine :wink:

Beipiel Package erstellen :

scott@ORA10GR2 >create or replace package teiln_pck as
2 FUNCTION GET_TEILN(P_KURSNR NUMBER) RETURN VARCHAR2;
3 END teiln_pck;
4 /

Package wurde erstellt.

scott@ORA10GR2 >create or replace package body teiln_pck as
2 FUNCTION GET_TEILN(P_KURSNR NUMBER) RETURN VARCHAR2 IS
3 -- Typdeklaration
4 TYPE namen_typ is table of teilnehmer.name%TYPE;
5 namen_tab namen_typ;
6 --
7 l_ergebnis varchar2(1000);
8 --
9 BEGIN
10 --
11 SELECT name
12 BULK COLLECT INTO namen_tab FROM teilnehmer t where
13 t.kursnr = P_KURSNR;
14 l_ergebnis := 'Teilnehmer für Kursnr ' || P_KURSNR || ' : ';
15 IF namen_tab.COUNT = 0 THEN
16 l_ergebnis := l_ergebnis || 'NIX';
17 ELSE
18 FOR i in namen_tab.FIRST .. namen_tab.LAST LOOP
19 l_ergebnis := l_ergebnis || namen_tab(i) || ' / ';
20 END LOOP;
21 END IF;
22 RETURN(l_ergebnis);
23 END GET_TEILN;
24 END teiln_pck;
25 /

Package Body wurde erstellt.



und dann das passende SELECT statement :


scott@ORA10GR2 >column KURSTEILNEHMER FORMAT A80
scott@ORA10GR2 >select k.kursnr, k.kurstitel, (select teiln_pck.get_teiln(k.kursnr) FROM DUAL) as KURSTEILNEHMER FROM KURSTAB k;

KURSNR KURSTITEL KURSTEILNEHMER
---------- ------------------------------ ----------------------------------------------------------
1 Kurs01 Teilnehmer für Kursnr 1 : Müller / Maier / Schulze /
2 Kurs02 Teilnehmer für Kursnr 2 : Schmitt / Krause /
3 Kurs03 Teilnehmer für Kursnr 3 : Bauer / König /
4 Kurs04 Teilnehmer für Kursnr 4 : NIX

scott@ORA10GR2 >


Aber ich muß zugeben, das wirkt ein bisschen wie "durch die Brust ins Auge" codiert.
Falls es funktioniert, zeig' es besser nie einem HTMLDB Spezialisten.
Da es für Collections extra die HTMLDB_COLLECTION API gibt, geht das Ganze bestimt auch eleganter.

Gruß!

nefu

nefu
2006-03-28, 22:28:32
Es kann sein, daß das Package in der HTMLDB GUI eingegeben werden muß.
Wie gesagt, ich habe keine praktischen Erfahrungen damit, kenne es nur von einer kurzen Präsentation bei Oracle.
Das SELECT statement läßt sich direkt in SQL/PLUS auch etwas einfacher ausführen :

scott@ORA10GR2 >select k.kursnr, k.kurstitel, teiln_pck.get_teiln(k.kursnr) as KURSTEILNEHMER FROM KURSTAB k;

KURSNR KURSTITEL KURSTEILNEHMER
---------- ------------------------------ ----------------------------------------------------------
1 Kurs01 Teilnehmer für Kursnr 1 : Müller / Maier / Schulze /
2 Kurs02 Teilnehmer für Kursnr 2 : Schmitt / Krause /
3 Kurs03 Teilnehmer für Kursnr 3 : Bauer / König /
4 Kurs04 Teilnehmer für Kursnr 4 : NIX

scott@ORA10GR2 >


- also direkt den Package Aufruf mit Alias angeben, ohne SELECT ... FROM DUAL.
Ob das auch im SQL-Anfrage Konstrukt klappt kannst Du ja ausprobieren.
Viel Erfolg!

nefu

Edit :

Aus dem HTMLDB User's Guide :


Creating a Package
To create a package:
1. Navigate to Object Browser:
a. Click the SQL Workshop icon on the Workspace home page.
b. Click Object Browser.
Object Browser appears.
2. Click Create.
3. From the list of object types, select Package.
4. Select the type of package you want to create:
■ Specification
■ Body
■ Package with methods on database tables
5. If you select Specification:
a. Enter a name and click Next.
The wizard creates a dummy package specification and displays it for editing.
b. Edit the specification and click Finish.
6. If you select Body:
a. Select the package you want to create the body for and click Next
The wizard creates a package body with stubbed out calls identified in the
specification and displays it for editing.
b. Edit the package body and click Finish.
7. If you select Package with methods on database tables:
a. Enter a name and click Next.
b. Select up to ten tables and click Next.
The wizard creates a specification and body with insert, update, delete, and
GET APIs for the selected tables. Note that you have the option to show or
download the specification or body.
c. Click Finish.

Kennung Eins
2006-03-28, 23:03:49
Das sieht sehr geil aus! Ich freu mich schon, das morgen zu implementieren :)
Ich melde mich dann wieder.

Danke!

nefu
2006-03-28, 23:30:13
Na dann viel Erfolg!

Ist das Ganze mehr Spielerei oder ein ernstes Projekt?
Was Du noch ausprobieren könntest :
Eventuell reicht die eigentliche FUNCTION, falls das mit dem Package erstellen nicht klappt.
Ich bin es halt gewohnt, Funktionen und Prozeduren in Packages zu packen.
Ein Error (bzw. Exception-) Handling fehlt natürlich komplett.
Und wie gesagt, es ist vielleicht nicht allzu elegant gelöst.
Ich hoffe, es klappt morgen!

Gruß!

nefu

nefu
2006-03-29, 08:26:35
Falls Du mit der von mir vorgeschlagenen Lösung Probleme bekommst, solltest Du mal einen Blick hierauf werfen :

http://www.oracle.com/technology/obe/obe10gdb/develop/htmldbmd/htmldbmd.htm#l7

Thema :

Creating a Master Detail Form Using Oracle HTML DB
Purpose
This tutorial shows you how to rapidly create a Master Detail Form by using Oracle HTML DB.

Time to Complete
Approximately 30 minutes

Klingt doch gut?

Den Beitrag habe ich über die Knowledge Base im Oracle Metalink gefunden.
Ich hoffe, Du kommst auch ohne einen Metalink account auf die Seite.

Gruß!

nefu

Kennung Eins
2006-03-29, 11:24:01
Der Wahnsinn, es funktioniert!! :massa:
Ich hätte gedacht HTMLDB würde wegen den Packages wieder rumspinnen, aber es klappt tatsächlich!

Sehr geil, ich danke dir!! http://forums.guru3d.com/images/smilies/cheers.gif

P.S.: Ist ein Projekt an der Uni - der letzte Schein fürs Diplom ... in Zusammenarbeit mit einer Firma, die im Bereich Bio/Genetik viel forscht.

[edit]
Die komplette Abfrage sieht übrigens jetzt so aus:SELECT T_PARAMETER.PARAMETER_ID as "ID",
HTMLDB_ITEM.CHECKBOX(10,T_PARAMETER.PARAMETER_ID,'CHECKED') as "ID Holder",
T_PARAMETER.SWITCH_NAME as "Switch Name",
T_PARAMETER.TRIVIAL_NAME as "Name",
T_PARAMETER.DESCRIPTION as "Description",
(
CASE
WHEN T_PARAMETER.MANDATORY = 0 THEN 'optional'
ELSE '<img src="/i/themes/theme_2/required.gif"> <b>required</b>'
END
) "Mandatory",
HTMLDB_ITEM.HIDDEN(4,'[$ID$]'||T_PARAMETER.PARAMETER_ID)||
(
CASE
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 2 THEN htmldb_item.select_list(4,'- select -','TRUE,FALSE','','readonly')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_5_2.DEFAULT_VALUE FROM V_DEFAULT_VALUE_5_2, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_5_2.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_5_2.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_5_3.DEFAULT_VALUE FROM V_DEFAULT_VALUE_5_3, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_5_3.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_5_3.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_5_4.DEFAULT_VALUE FROM V_DEFAULT_VALUE_5_4, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_5_4.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_5_4.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_6_2.DEFAULT_VALUE FROM V_DEFAULT_VALUE_6_2, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_6_2.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_6_2.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_6_3.DEFAULT_VALUE FROM V_DEFAULT_VALUE_6_3, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_6_3.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_6_3.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.select_list_from_query(4,'- select -','SELECT T_DEFAULT_VALUES.DEFAULT_VALUE, V_DEFAULT_VALUE_6_4.DEFAULT_VALUE FROM V_DEFAULT_VALUE_6_4, T_DEFAULT_VALUES WHERE V_DEFAULT_VALUE_6_4.DEFAULT_VALUE_ID = T_DEFAULT_VALUES.DEFAULT_VALUE_ID AND V_DEFAULT_VALUE_6_4.PARAMETER_ID = '||T_PARAMETER.PARAMETER_ID,'','NO')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 6 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 7 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID)
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 2 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 3 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 4 THEN htmldb_item.text(4,(SELECT V_DEFAULT_VALUE_TEXTBOX.DEFAULT_VALUE FROM V_DEFAULT_VALUE_TEXTBOX WHERE V_DEFAULT_VALUE_TEXTBOX.PARAMETER_ID = T_PARAMETER.PARAMETER_ID))
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 7 THEN '- not supported -'
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 8 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
WHEN T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8 AND T_DATATYPE.DATA_TYPE_ID = 9 THEN htmldb_item.checkbox(4,T_PARAMETER_TYPE.PARAMETER_TYPE_ID,'CHECKED')
ELSE htmldb_item.text(4,'')
END
) "Value",
(
CASE
WHEN (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5 OR T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6) AND (T_DATATYPE.DATA_TYPE_ID = 2 OR T_DATATYPE.DATA_TYPE_ID = 3 OR T_DATATYPE.DATA_TYPE_ID = 4) THEN
(select (PCK_TPARAM.GET_DESCR(T_PARAMETER.PARAMETER_ID)) t FROM T_PARAMETER tparam WHERE tparam.PARAMETER_ID = T_PARAMETER.PARAMETER_ID)
ELSE
'<center>N/A</center>'
END
) as "Default Value Description(s)",
T_PARAMETER_TYPE.NAME as "Parameter Type Name",
T_PARAMETER_TYPE.DESCRIPTION as "Parameter Type Description"
FROM T_HAS_PARAMETERS, T_PARAMETER, T_DATATYPE, T_PARAMETER_TYPE
WHERE T_HAS_PARAMETERS.TOOL_ID = :TOOL_SELECTION_CB
AND T_PARAMETER.PARAMETER_ID = T_HAS_PARAMETERS.PARAMETER_ID
AND T_DATATYPE.DATA_TYPE_ID = T_PARAMETER.DATA_TYPE_ID
AND T_PARAMETER.PARAMETER_TYPE_ID = T_PARAMETER_TYPE.PARAMETER_TYPE_ID
AND NOT ((T_DATATYPE.DATA_TYPE_ID = 6) AND ((T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 3) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 4) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 5) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 6) OR (T_PARAMETER_TYPE.PARAMETER_TYPE_ID = 8)))
ORDER BY T_PARAMETER.MANDATORY DESC;
;D

nefu
2006-03-29, 12:51:08
Glückwunsch!

Das Ganze läßt sich vermutlich auch einfacher lösen, aber Eleganz ist hier wohl nicht unbedingt erforderlich.
HTMLDB wollte ich schon lange mal installieren und ausprobieren, aber ich fürchte, dann habe ich gleich ein Projekt damit am Hals.
Also lasse ich es sicherheitshalber vorerst mal.

Gruß!

nefu

Kennung Eins
2006-03-29, 13:04:59
Mit meinem Halbwissen über HTMLDB kann ich sagen, daß es zwar viel kann, aber besser nur für unkomplizierte Sachen benutzt werden sollte. Sobald eine Element-Dynamik da mit reinkommt (also dynamisch Elemente generieren) ist es Grütze.

Z.B. Speicherstatus (Session) von dynamisch generierten Elementen? Gibts nicht. Zugriff nach onSubmit auf dynamisch generierte Elemente, die keinen Wert beinhalten (leere Textbox) -> gibts nicht. Arrayverwaltung für Arrays dynamischer Elemente? -> großer Quatsch. Das sind jetzt nur ein paar Sachen, an die ich mich spontan erinnern kann.

Ich wäre froh gewesen, wenn JSP o.ä. das Arbeitswerkzeug gewesen wäre.

nefu
2006-03-29, 13:19:25
Die Positionierung dieses Produkts ist mir auch nicht so ganz klar.
Für die 'großen' Webanwendungen gibt es ja den Application Server mit Portal etc. (Haben wir auch im Einsatz).
Und für schnelle adhoc Anwendung scheint mir das etwas kompliziert geraten zu sein. Mein Eindruck von der Präsentation (ist schon ca. ein Jahr her) war auch nicht so toll.
Aber Oracle Produkte brauchen öfter mal ein paar Jahre 'Reifezeit'.
Wenn ich da nur an die ersten Versionen des Application Servers denke ... :rolleyes:
Viel Erfolg weiterhin!

nefu