Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Ray-D

Alter Hase

  • "Ray-D" is male
  • "Ray-D" started this thread

Posts: 690

Date of registration: Oct 9th 2002

Location: Zimbabwe-Island Ost Beiträge: 3.427

Occupation: Informatiker

1

Monday, June 13th 2005, 12:49pm

SQL Übung 9

Tachchen,

folgende situation bei 1a):

1. ich erstelle eine funktion, es werden keine fehler gemeldet
2. ich rufe die funktion auf
3. folgender fehler erscheint: 'CREATE_STAT_TABLE' ist keine Prozedur oder ist nicht definiert

dass es keine prozedur ist, verwundert nicht weiter, es soll ja auch eine funktion sein. aber aus welchen gründen sollte sie dann nicht definiert sein, wenn ich sie doch ohne kompilierungsfehler definiert habe?

dieses "phänomen" beschrieb mir ein freund schon bei der letzten übung. auch da konnte ich keinen grund für dieses problem finden

?(

thx 4 the support
"ob ich alles weiss, was wir wissen, weiss ich auch nicht, aber ich weiss natürlich niemand von uns weiss etwas was er nicht weiss" - Wolgang Schäuble
Freiheit wird nicht erbettelt, sondern erkämpft


Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »Ray-D« (Heute, 04:29)

Prof_NARF

Trainee

Posts: 72

Date of registration: Nov 18th 2002

2

Monday, June 13th 2005, 1:24pm

RE: SQL Übung 9

Das selbe Problem hatte ich auch. Anscheinend kann man Funktionen nicht wie Prozeduren mit EXECUTE aufrufen.

Versuch es mal hiermit:

Source code

1
2
3
4
DECLARE
BEGIN
	dbms_output.put_line('Tabelle: ' || create_stat_table('TEST'));
END;


So hat es bei mir funktioniert.

mfg
Prof_NARF
Hier könnt ihr was über die Hommingberger Gepardenforelle erfahren: :D

Ray-D

Alter Hase

  • "Ray-D" is male
  • "Ray-D" started this thread

Posts: 690

Date of registration: Oct 9th 2002

Location: Zimbabwe-Island Ost Beiträge: 3.427

Occupation: Informatiker

3

Monday, June 13th 2005, 1:30pm

aha, dann hab ist es das "DECLARE" welches ich nicht benutzte und das "OUTPUT", danke prof_narf!
"ob ich alles weiss, was wir wissen, weiss ich auch nicht, aber ich weiss natürlich niemand von uns weiss etwas was er nicht weiss" - Wolgang Schäuble
Freiheit wird nicht erbettelt, sondern erkämpft


Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »Ray-D« (Heute, 04:29)

This post has been edited 1 times, last edit by "Ray-D" (Jun 13th 2005, 1:35pm)


thommyslaw

Junior Schreiberling

  • "thommyslaw" is male

Posts: 226

Date of registration: Oct 7th 2003

4

Monday, June 13th 2005, 5:31pm

ich verzweifle grad.
ich hab die prozeduren a) - d) geschrieben und beim aufruf des beispiels:

Source code

1
EXECUTE add_statistic('MOVIEDB', 'PERSON');
bekomme ich den Fehler "Ungültiger Tabellenname in "COLUMN_VALUES", Zeile 9".
Nach sehr langwierigem Testen der übergebenen Parameter werd ich trotzdem nicht schlauer.
in add_statistic() rufe ich column_values(tbname, cname, totvar, difvar, nullvar); auf, wobei tbname im obigen Beispiel das übergebene 'PERSON' ist.
in column_values habe ich folgendes erfolglos versucht:

Source code

1
SELECT COUNT(cname) INTO totvar FROM tname;
sowie

Source code

1
EXECUTE IMMEDIATE 'SELECT COUNT(:7) INTO totvar FROM :8' USING cname, tname;
beides erfolglos, wohingegen ein test mit

Source code

1
SELECT 8*8 INTO totvar FROM dual;
erfolgreich war.

ich hoffe mir kann geholfen werden.

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

5

Monday, June 13th 2005, 10:56pm

Hm, mal was allgemeines, ich habe gerade einen Fehler eliminiert, der eigentlich keiner ist, und zwar darf scheinbar bei create table ... ; kein semicolon stehen, also bei
execute immediate 'create table ... '; <- ja, aber nicht : '... ;';
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Prof_NARF

Trainee

Posts: 72

Date of registration: Nov 18th 2002

6

Tuesday, June 14th 2005, 10:02am

Ich hatte ein ähnliches Problem. Ich hatte versucht die Tabelle wie folgt zu füllen:

Source code

1
EXECUTE IMMEDIATE 'insert into :1 values (:2, :3, :4, :5, :6)' USING tname, tabelle, colname, total, diff, nulls;


da gabs bei mir den selben Fehler wie bei Thommy. Jetzt habe ich es so:

Source code

1
EXECUTE IMMEDIATE 'insert into ' || tname || ' values (:1, :2, :3, :4, :5)' USING tabelle, colname, total, diff, nulls;


und es funktioniert. Warum das erste Bsp. nicht funktioniert ist mir allerdings auch schleierhaft.

Vielleicht hilft das ja irgendwem.

mfg
Prof_NARF
Hier könnt ihr was über die Hommingberger Gepardenforelle erfahren: :D

thommyslaw

Junior Schreiberling

  • "thommyslaw" is male

Posts: 226

Date of registration: Oct 7th 2003

7

Wednesday, June 15th 2005, 1:19am

ich konnte 1c) jetzt mit

Source code

1
EXECUTE IMMEDIATE stmt INTO var;
bewältigen.

This post has been edited 1 times, last edit by "thommyslaw" (Jun 15th 2005, 1:19am)


mDev

Erfahrener Schreiberling

  • "mDev" is male

Posts: 282

Date of registration: Oct 10th 2002

Location: Hannover

Occupation: Wissenschaftlicher Mitarbeiter

8

Thursday, June 16th 2005, 8:16pm

zu 1a)
man soll zwei primärschlüssel definieren, er meckert aber dass es nur einen geben kann

zu 1d)
wie kann ich den offenen cursor aus 1b) benutzen?

Hannes5282

Trainee

  • "Hannes5282" is male

Posts: 57

Date of registration: Nov 13th 2002

9

Thursday, June 16th 2005, 8:36pm

Quoted

Original von mDev
zu 1a)
man soll zwei primärschlüssel definieren, er meckert aber dass es nur einen geben kann

zu 1d)
wie kann ich den offenen cursor aus 1b) benutzen?


zu 1a)
Man muß ein Paar von Spalten als Primärschlüssel bestimmen (...PRIMARY KEY(a,b)...)

zu 1d)
SYS_REFCURSOR-Variable deklarieren und ihr den Rückgabewert aus 1b zuweisen.