Grundsatzproblem
Title: Nachricht
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 = 'buchungsdaten';
IF v_count = 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 ();
*/
--
============================================
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
Home |
Main Index |
Thread Index