This is a multi-part message in MIME format.
------=_NextPart_000_0007_01C5FC7A.DAC39E70
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hallo,
z.Z. arbeite ich mich in PostgreSQL ein und versuche eine kleine =
Datenbank,
die bisher unter MySql lief, auf PostgreSQL umzuschreiben.
Installiert ist die aktuelle Windows-Version von PostgreSQL unter WinXP. =
Im wesentlichen geht es um die 3 nachfolgenden Funktionen:
--------------------------------------
CREATE OR REPLACE FUNCTION create_table_buchungsdaten()
RETURNS void
AS $BODY$
DECLARE
v_count integer;
BEGIN
SELECT INTO v_count count(*) FROM pg_tables where tablename =3D
'buchungsdaten';
IF v_count =3D 0 THEN
CREATE TABLE buchungsdaten
(
LIKE Journal INCLUDING DEFAULTS
);
ALTER TABLE buchungsdaten
ADD id serial;
ALTER TABLE buchungsdaten
ADD stamp_created timestamp default now();
COMMENT ON TABLE buchungsdaten IS 'Buchungsdaten ohne Storno';
ELSE
TRUNCATE TABLE buchungsdaten;
SELECT setval (buchungsdaten_id_seq, 1, false);
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
COMMENT ON FUNCTION create_Table_Journal() IS 'buchungsdaten';
--------------------------------------
CREATE OR REPLACE FUNCTION do_buchungsdaten()
RETURNS void
AS $BODY$
BEGIN
Execute create_table_buchungsdaten ();
INSERT INTO buchungsdaten
SELECT *
FROM journal
WHERE journal.belegnummer
NOT IN (
SELECT DISTINCT belegnummer
FROM journal
WHERE lower (buchungstext) like '<storno>%'
);
END;
$BODY$
LANGUAGE plpgsql;
COMMENT ON FUNCTION do_buchungsdaten() IS 'Erstellt Filter aus Journal =
die
Buchungssätze ohne Storno';
--------------------------------------
CREATE OR REPLACE FUNCTION run_first() RETURNS void AS $BODY$
BEGIN
PERFORM create_table_journal ();
EXECUTE create_table_buchungsdaten ();
PERFORM create_table_buchungsdaten_afa_anlagen ();
PERFORM create_table_buchungsdaten_jahresabschluss ();
PERFORM create_table_buchungstext_korrektur ();
PERFORM create_table_daten_afa_anlagen ();
PERFORM create_table_konten_abschreibung_sachanlagen ();
PERFORM create_table_konten_anlagen ();
PERFORM create_table_konten_betrag_ausgleichen ();
PERFORM create_table_konten_folgejahr ();
PERFORM create_table_konten_kosten_kfz_anteil_privat ();
PERFORM create_table_konten_kosten_raum_anteil_firma ();
PERFORM create_table_konten_kosten_telefon_anteil_privat ();
PERFORM create_table_konten_umbuchen ();
PERFORM create_table_konten_unternehmer_dienstreisen ();
PERFORM create_table_konten_unternehmer_fahrten_zur_arbeitsstaette ();
PERFORM create_table_konten_unternehmer_verpflegungsmehraufwand ();
PERFORM create_table_verteilung_fahrten_kfz ();
PERFORM create_table_verteilung_kosten_raum ();
/*
PERFORM import_konten_abschreibung_sachanlagen ();
PERFORM import_konten_anlagen ();
PERFORM import_konten_betrag_ausgleichen ();
PERFORM import_konten_folgejahr ();
PERFORM import_konten_kosten_kfz_anteil_privat ();
PERFORM import_konten_kosten_raum_anteil_firma ();
PERFORM import_konten_kosten_telefon_anteil_privat ();
PERFORM import_konten_umbuchen ();
PERFORM import_konten_unternehmer_dienstreisen ();
PERFORM import_konten_unternehmer_fahrten_zur_arbeitsstaette ();
PERFORM import_konten_unternehmer_verpflegungsmehraufwand ();
PERFORM import_verteilung_fahrten_kfz ();
PERFORM import_verteilung_kosten_raum ();
*/
-- =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
PERFORM import_journal ();
PERFORM import_kontoplan ();
-- EXECUTE do_buchungsdaten ();
-- PERFORM create_table_stammdaten ();
-- PERFORM create_table_konten_verwendung_von_gegenstaenden ();
-- PERFORM do_daten_afa_anlagen ();
-- PERFORM do_konten_umbuchen ();
-- PERFORM do_korrektur_privat_gebuchte_betriebsausgaben ();
-- PERFORM import_buchungsdaten_afa_anlagen ();
END;
$BODY$
LANGUAGE plpgsql;
--------------------------------------
Das Problem (es geht hier speziell um die Tablle "buchungsdaten")
Ist die Tabelle "buchungsdaten" nicht in der Datenbank vorhanden, wird =
sie
beim ersten Aufruf von "select run_first()" durch die darin enthaltene
Funktion "create_table_buchungsdaten ()" erzeugt. Wiederhole ich den =
Aufruf
von "select run_first()" erhalte ich die nachfolgende Fehlermeldung:
--------------------------------------
ERROR: column "buchungsdaten_id_seq" does not exist
KONTEXT: SQL statement "SELECT setval (buchungsdaten_id_seq, 1, =
false)"
PL/pgSQL function "create_table_buchungsdaten" line 27 at SQL statement
PL/pgSQL function "run_first" line 5 at execute statement
--------------------------------------
"buchungsdaten_id_seq" wird nachweislich beim ersten Durchlauf erzeugt.
Was ist die Ursache für diese Fehlermeldung?
Welchen Fehler habe ich in den erstellten Funktionen eingebaut, den ich
nicht sehe?
Für die Funktionsaufrufe habe ich zwischenzeitlich "EXECUTE" statt =
"PERFORM"
eingesetzt, aber das hilft auch nicht!
mfg
Friedrich Stockebrand
------=_NextPart_000_0007_01C5FC7A.DAC39E70
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">
<TITLE>Nachricht</TITLE>
<META content=3D"MSHTML 6.00.2900.2769" name=3DGENERATOR></HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>Hallo, </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>z.Z. arbeite ich mich in PostgreSQL ein =
und
versuche eine kleine Datenbank, die bisher unter MySql lief, auf =
PostgreSQL
umzuschreiben. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Installiert ist die aktuelle =
Windows-Version von
PostgreSQL unter WinXP. </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Im wesentlichen geht es um die 3 =
nachfolgenden
Funktionen: </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial =
size=3D2>--------------------------------------</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>CREATE OR REPLACE FUNCTION
create_table_buchungsdaten()<BR> RETURNS void <BR> <BR>AS
$BODY$</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>DECLARE<BR> v_count
integer;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>BEGIN</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> SELECT INTO v_count =
count(*) FROM
pg_tables where tablename =3D 'buchungsdaten';</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> IF v_count =3D 0 THEN<BR>
<BR> CREATE =
TABLE buchungsdaten<BR>
(<BR> LIKE Journal =
INCLUDING DEFAULTS <BR>
);<BR> <BR> ALTER
TABLE buchungsdaten<BR>
ADD id serial;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> ALTER
TABLE buchungsdaten<BR>
ADD stamp_created timestamp default
now();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> COMMENT ON TABLE =
buchungsdaten
IS 'Buchungsdaten ohne Storno';<BR> <BR>
ELSE</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> TRUNCATE
TABLE buchungsdaten;<BR> SELECT setval =
(buchungsdaten_id_seq, 1, false);</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> END IF;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>END;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>$BODY$</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>LANGUAGE 'plpgsql' =
VOLATILE;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>COMMENT ON FUNCTION =
create_Table_Journal() IS
'buchungsdaten';</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial =
size=3D2>--------------------------------------</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>CREATE OR REPLACE FUNCTION =
do_buchungsdaten()
<BR>RETURNS void </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>AS $BODY$</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>BEGIN<BR> <BR> Execute
create_table_buchungsdaten ();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2> INSERT
INTO buchungsdaten<BR> SELECT *<BR>
FROM journal<BR> WHERE
journal.belegnummer<BR> NOT IN
(<BR> =
SELECT
DISTINCT
belegnummer<BR> &nbs=
p; FROM
journal<BR> &n=
bsp;
WHERE lower (buchungstext) like
'<storno>%'<BR> &nbs=
p;
);</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>END;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>$BODY$</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>LANGUAGE plpgsql;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>COMMENT ON FUNCTION do_buchungsdaten() =
IS 'Erstellt
Filter aus Journal die Buchungssätze ohne Storno';</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial =
size=3D2>--------------------------------------</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>CREATE OR REPLACE FUNCTION run_first() =
RETURNS void
AS $BODY$</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>BEGIN</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2> PERFORM create_table_journal =
();<BR>
EXECUTE create_table_buchungsdaten ();<BR> PERFORM
create_table_buchungsdaten_afa_anlagen ();<BR> PERFORM
create_table_buchungsdaten_jahresabschluss ();<BR> PERFORM
create_table_buchungstext_korrektur ();<BR> PERFORM
create_table_daten_afa_anlagen ();<BR> PERFORM
create_table_konten_abschreibung_sachanlagen ();<BR> PERFORM
create_table_konten_anlagen ();<BR> PERFORM
create_table_konten_betrag_ausgleichen ();<BR> PERFORM
create_table_konten_folgejahr ();<BR> PERFORM
create_table_konten_kosten_kfz_anteil_privat ();<BR> PERFORM
create_table_konten_kosten_raum_anteil_firma ();<BR> PERFORM
create_table_konten_kosten_telefon_anteil_privat ();<BR> PERFORM
create_table_konten_umbuchen ();<BR> PERFORM
create_table_konten_unternehmer_dienstreisen ();<BR> PERFORM
create_table_konten_unternehmer_fahrten_zur_arbeitsstaette ();<BR> =
PERFORM
create_table_konten_unternehmer_verpflegungsmehraufwand ();<BR> =
PERFORM
create_table_verteilung_fahrten_kfz ();<BR> PERFORM
create_table_verteilung_kosten_raum ();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>/*<BR> PERFORM
import_konten_abschreibung_sachanlagen ();<BR> PERFORM
import_konten_anlagen ();<BR> PERFORM =
import_konten_betrag_ausgleichen
();<BR> PERFORM import_konten_folgejahr ();<BR> PERFORM
import_konten_kosten_kfz_anteil_privat ();<BR> PERFORM
import_konten_kosten_raum_anteil_firma ();<BR> PERFORM
import_konten_kosten_telefon_anteil_privat ();<BR> PERFORM
import_konten_umbuchen ();<BR> PERFORM
import_konten_unternehmer_dienstreisen ();<BR> PERFORM
import_konten_unternehmer_fahrten_zur_arbeitsstaette ();<BR> =
PERFORM
import_konten_unternehmer_verpflegungsmehraufwand ();<BR> PERFORM
import_verteilung_fahrten_kfz ();<BR> PERFORM
import_verteilung_kosten_raum ();<BR>*/</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>--
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2> PERFORM import_journal =
();<BR>
PERFORM import_kontoplan ();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>-- EXECUTE do_buchungsdaten =
();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2>-- PERFORM =
create_table_stammdaten
();<BR>-- PERFORM create_table_konten_verwendung_von_gegenstaenden =
();<BR>-- PERFORM do_daten_afa_anlagen ();<BR>-- PERFORM
do_konten_umbuchen ();<BR>-- PERFORM
do_korrektur_privat_gebuchte_betriebsausgaben ();<BR>-- PERFORM
import_buchungsdaten_afa_anlagen ();</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2>END;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>$BODY$<BR>LANGUAGE =
plpgsql;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial =
size=3D2>--------------------------------------</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2>Das Problem (es geht hier speziell =
um die
Tablle "buchungsdaten")</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Ist die Tabelle "buchungsdaten" nicht =
in der
Datenbank vorhanden, wird sie beim ersten Aufruf von "select =
run_first()" durch
die darin enthaltene Funktion "create_table_buchungsdaten ()" erzeugt.
Wiederhole<SPAN class=3D814293703-09122005> </SPAN>ich den Aufruf von =
"select
run_first()" erhalte ich die nachfolgende Fehlermeldung:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial =
size=3D2>--------------------------------------</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>ERROR: column =
"buchungsdaten_id_seq" does not
exist<BR>KONTEXT: SQL statement "SELECT setval
(buchungsdaten_id_seq, 1, false)"<BR>PL/pgSQL function
"create_table_buchungsdaten" line 27 at SQL statement<BR>PL/pgSQL =
function
"run_first" line 5 at execute statement</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial =
size=3D2>--------------------------------------</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>"buchungsdaten_id_seq" wird =
nachweislich beim
ersten Durchlauf erzeugt.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2>Was ist die Ursache für diese =
Fehlermeldung?
<BR>Welchen Fehler habe ich in den erstellten Funktionen eingebaut, den =
ich
nicht sehe? </FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Für die Funktionsaufrufe habe ich =
zwischenzeitlich
"EXECUTE" statt "PERFORM" eingesetzt, aber das hilft auch =
nicht!</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><BR><FONT face=3DArial size=3D2>mfg</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Friedrich Stockebrand</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV> </DIV></BODY></HTML>
------=_NextPart_000_0007_01C5FC7A.DAC39E70--
