hi
hab ein problem in SQL
Und zwar will ich einen report machen und nach jeden fünften eintrag eine leerzeile erstellen.
Ich weis das es dafür in sql eine funktion gibt, weis aber nicht wie die heisst
danke,
michael
hi
hab ein problem in SQL
Und zwar will ich einen report machen und nach jeden fünften eintrag eine leerzeile erstellen.
Ich weis das es dafür in sql eine funktion gibt, weis aber nicht wie die heisst
danke,
michael
Hallo Michael,
in SQL selbst gibt es sowas sicherlich nicht. SQL ist eine reine Schnittstellensprache, mit der man eine SQL-fähige Datenbank steuern kann. Du kannst also beliebig viele Datensätze damit auslesen, aber die Aufbereitung der Daten macht man nicht mit SQL selbst. Arbeitest Du mit PHP, CGI oder ähnlichen oder benutzt Du ein MS Access-Frontend oder sonstiges?
ich arbeite mit dem report builder
es müsste doch möglich sein...
man kann auch in PL programmieren, aber da kenn ich mich nicht aus
Hallo Michael,
mit dem report builder kenne ich mich leider nicht aus.
Also die Ausgabe mit PL/SQL müsste in etwa so gehen:
create or replace procedure test
is
v_index number(10) := 0;
cursor c_index
is
select *
from tabellenname;
Begin
for v_row in c_index loop
v_index := v_index + 1;
if (mod(v_index,5) = 0) then
dbms_output.put_line();
end if;
dbms_output.put_line(v_row.spalte1 || ' ' || v_row.spalte2 || ' ' || v_row.spalte3);
end loop;
End;
Alles anzeigen
Der Aufruf in einem anonymen Block müsste so aussehen:
Vielleicht hilft dir das Beispiel ja PL/SQL zu verstehen. Wenn deine Datenbank das allerdings nicht unterstützt hilft dir das wohl auch nicht weiter. Mit dem Report Builder kenn ich mich auch net aus.
naja, sieht nicht schwer aus
nur zwei fragen:
was passiert in der ersten zeile
und was macht die funktion mod() ?
Die zweite frage hat sich erübrigt
Zitat von Michael_SQLwas passiert in der ersten zeile
Du legst eine Prozedur mit dem Namen test an. (create)
Wenn es eine Prozedur mit dem Namen test schon gibt wird sie durch die neue ersetzt. (replace)
Prozeduren oder Funktionen bieten die Möglichkeit SQL Queries zu benennen und abzuspeichern.
bei mir meldet er nähmlich das dass eine funktion sein muss
Wenn ich funktion hinschreibe kennt er create nicht.
Lösche ich create und replace weg meldet er das in dieser Zeile ein fehler ist
i := i+1;
er kennt den den Bezeichner '|' nicht !?! (welcher bezeichner?)
Sorry wenn ich so dumme fragen stelle
hmm, naja jetzt lasst es sich zumindest kompilieren
Aber ich vermute es geht nicht wegen zwei fehlern,
das erste war das die funktion dpms_out.put_line() nicht gegangen ist. Da hab ich dann dpms_output.put_line() als ersatz genommen
das zweite ist das ich das alles nicht so auf mache
sondern, ich gebe es in den PL/SQL filter von Report Builder
Jo, dbms_output.put_line(); ist auch richtig. Immer diese Flüchtigkeitsfehler. Das zweite mal hat ichs ja richtig geschrieben. Passiert wenn man sich länger nicht mehr mit einer Sache beschäftigt.
Da du das create und replace weggelassen hast ist klar das du den anonymen Block nicht mehr brauchst, bzw. das dieser nicht funktioniert.
Du kannst auch alles in einen anonymen Block schreiben:
Declare
v_index number(10) := 0;
cursor c_index
is
select *
from tabellenname;
Begin
for v_row in c_index loop
v_index := v_index + 1;
if (mod(v_index,5) = 0) then
dbms_output.put_line();
end if;
dbms_output.put_line(v_row.spalte1 || ' ' || v_row.spalte2 || ' ' || v_row.spalte3);
end loop;
End;
Alles anzeigen
Würd mich wirklich interessieren wenn es funktioniert, bzw. es das ist was du benötigst. ~
ok, jetzt ists klar. Ich hab einen anderen compiler
er meldet immer das Declare nicht geht weil ich eine function brauche
und dbms_output hab ich sogar richtig geschrieben gehabt, trotzdem funktionierts nicht
ok, er kennt dbms_output schon, aber er braucht bei Put_line einen paramter
könnt ihr mir nochmal in PL helfen?
ich möchte jetzt nur einen zähler einbauen damit er sofort beim zweiten wert aufhört
aber ich hab keine ahnung in PL
ich weis nicht mal wie man das richtig startet
Es sollen also 2 Zeilen aus der Tabelle ausgegeben werden, und dann soll er aufhören. Das sollte so machbar sein, falls die Datenbank eine Oracle Datenbank ist:
Declare
v_counter number(10) := 0;
v_index tabellenname%ROWTYPE;
cursor c_index
is
select *
from tabellenname;
Begin
open c_index;
loop
FETCH c_index into v_index;
dbms_output.put_line(v_index.spalte1 || ' ' || v_index.spalte2 || ' ' || v_index.spalte3);
v_counter := v_counter + 1;
exit when c_index%NOTFOUND or v_counter = 2;
end loop;
close c_index;
End;
Alles anzeigen
Ansonsten beschäftige dich mal mit PL.
http://www.datenbank-plsql.de/ falls es sich um eine Oracle Datenbank handelt.
kennt ihr zufällig ein programm womit man gut mit PL programmieren kann?
Ich hab nähmlich den Report builder und der ist für so was ziehmlich sch***
Keine Ahnung