Nun ich denke, daß dies auch kein soo großes Problem ist. Aber irgendwo hakt es.
Also ich habe eine Tabelle mit einer Sequenz (das erste Attribut muss mit einer unique-Nummer versehen werden:
CREATE TABLE auktionen(
aid SERIAL PRIMARY KEY,
kid INTEGER NOT NULL,
name VARCHAR(25) NOT NULL,
frei CHAR(1) DEFAULT 'Y',
status CHAR(1) DEFAULT '1', -- 1: In Vorbereitung
sofort NUMERIC(16,2) DEFAULT 0,
foto VARCHAR(25),
beschreibung VARCHAR(150),
startzeit TIMESTAMP NOT NULL,
endzeit TIMESTAMP NOT NULL,
startpreis NUMERIC(16,2) DEFAULT 0,
preis NUMERIC(16,2) DEFAULT 0,
katid INTEGER NOT NULL,
FOREIGN KEY(katid)
REFERENCES kategorie(katid),
FOREIGN KEY(kid)
REFERENCES kunden(kid)
);
Und mit dieser Funktion versuche ich da was einzugeben:
CREATE OR REPLACE FUNCTION neue_auktion ( numeric, text, text, text, text, text, text, numeric ) RETURNS text AS $$
DECLARE
kunden_id ALIAS FOR $1;
name ALIAS FOR $2;
beschreibung ALIAS FOR $3;
startzeit ALIAS FOR $4;
endzeit ALIAS FOR $5;
startpreis ALIAS FOR $6;
preis ALIAS FOR $7;
kategorie ALIAS FOR $8;
BEGIN
INSERT INTO auktionen ( kid, name, beschreibung, startzeit, endzeit, startpreis, preis, katid ) VALUES ( kunden_id, name, beschreibung, startzeit, endzeit, startpreis, startpreis, kategorie );
RETURN 'OK';
END;
$$
LANGUAGE plpgsql;
Aber schon bei der Eingabe der Funktion in psql gibt es “Parser-Fehler”?
test2=# \i neue_auktion
psql:neue_auktion:19: FEHLER: Fehler »Syntaxfehler« bei »$1« at character 31
QUERY: INSERT INTO auktionen ( kid, $1 , $2 , $3 , $4 , $5 , $6 , katid ) VALUES ( $7 , $8 , $9 , $10 , $11 , $12 , $13 , $14 )
CONTEXT: SQL statement in PL/PgSQL function “neue_auktion” near line 13
psql:neue_auktion:19: ZEILE 1: INSERT INTO auktionen ( kid, $1 , $2 , $3 , $4 , $5 , …
psql:neue_auktion:19: ^
Wo liegt das Problem, daran, dass ich nicht alle Felder in der Tabelle fülle? Das erste Attribut ist, wie schon erwähnt über eine Sequenz zu füllen. Da darf ich oder brauch ich keine Nummer einzugeben, sondern es wird automatisch eine fortlaufende Nummer vergeben. Ist hier das Problem?
Gruss Christian