postgresql: Stored Procedure
Twilo
- datenbank
Hallo,
ich habe mir eine Stored Procedure angelegt
-- Function: get_all_customer(OUT kunden_id integer, OUT geschaeftspartner_id integer, OUT firma character varying, OUT nachname character varying, OUT vorname character varying, OUT strasse character varying, OUT plz bpchar, OUT ort character varying, OUT telefon1 character varying, OUT telefon2 character varying, OUT telefax1 character varying, OUT telefax2 character varying, OUT email1 character varying, OUT email2 character varying, OUT webpraesenz character varying)
-- DROP FUNCTION get_all_customer(OUT kunden_id integer, OUT geschaeftspartner_id integer, OUT firma character varying, OUT nachname character varying, OUT vorname character varying, OUT strasse character varying, OUT plz bpchar, OUT ort character varying, OUT telefon1 character varying, OUT telefon2 character varying, OUT telefax1 character varying, OUT telefax2 character varying, OUT email1 character varying, OUT email2 character varying, OUT webpraesenz character varying);
CREATE OR REPLACE FUNCTION get_all_customer(OUT kunden_id integer, OUT geschaeftspartner_id integer, OUT firma character varying, OUT nachname character varying, OUT vorname character varying, OUT strasse character varying, OUT plz bpchar, OUT ort character varying, OUT telefon1 character varying, OUT telefon2 character varying, OUT telefax1 character varying, OUT telefax2 character varying, OUT email1 character varying, OUT email2 character varying, OUT webpraesenz character varying) AS
'SELECT t1._kunden_id AS kunden_id, t1._geschaeftspartner_id AS geschaeftspartner_id, t2._firma AS firma, t2._nachname As nachname, t2._vorname AS vorname, t2._strasse AS strasse, t2._plz AS plz, t2._ort AS ort, t2._telefon1 AS telefon1, t2._telefon2 AS telefon2, t2._telefax1 AS telefax1, t2._telefax2 AS telefax2, t2._email1 AS email1, t2._email2 AS email2, t2._webpraesenz AS webpraesenz FROM kunde t1 INNER JOIN geschaeftspartner t2 ON t1._geschaeftspartner_id = t2._geschaeftspartner_id'
LANGUAGE 'sql' VOLATILE;
ALTER FUNCTION get_all_customer(OUT kunden_id integer, OUT geschaeftspartner_id integer, OUT firma character varying, OUT nachname character varying, OUT vorname character varying, OUT strasse character varying, OUT plz bpchar, OUT ort character varying, OUT telefon1 character varying, OUT telefon2 character varying, OUT telefax1 character varying, OUT telefax2 character varying, OUT email1 character varying, OUT email2 character varying, OUT webpraesenz character varying) OWNER TO xxx;
1. ich hoffe mal, dass das mit den Ausgabeparametern so stimmt ;-)
2. ich erhalte folgende Fehlermeldung, wenn ich die Procedure in pgAdmin aufrufe "CALL get_all_customer()"
ERROR: syntax error at or near "CALL"
SQL Status:42601
Zeichen:1
php mit pdo gibt mir folgendes zurück
PDOException Object
(
[message:protected] => SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "CALL" at character 1
[string:private] =>
[code:protected] => 42601
[file:protected] => /home/xxx/xxx/xxx/xxx/kunden_auflisten.php
[line:protected] => 7
[trace:private] => Array
(
[0] => Array
(
[file] => /home/xxx/xxx/xxx/xxx/kunden_auflisten.php
[line] => 7
[function] => query
[class] => PDO
[type] => ->
[args] => Array
(
[0] => CALL get_all_customer()
))
)
[errorInfo] => Array
(
[0] => 42601
[1] => 7
[2] => ERROR: syntax error at or near "CALL" at character 1
))
postgres wird in der Version 8.1.5 verwendet
woran könnte das liegen?
ps. ich fange mit Stored Procedure gerade erst an ;-)
mfg
Twilo
Bist Du sicher, dass die "OUT-Parameter" deklariert werden muessen bzw. duerfen?
Und warum erstellst Du die SP nicht in einem Schritt?
Und wie immer mein Standardtipp:
Problem isolieren, d.h. zuallererst die primitivsmoegliche SP erstellen, darauf aufbauen und entwickeln bis es nicht mehr funzt. Diesen Punkt zweifelsfrei und somit reproduzierbar feststellen und ggf. zur Diskussion stellen bzw. dokunutzend bearbeiten.
Hallo,
Bist Du sicher, dass die "OUT-Parameter" deklariert werden muessen bzw. duerfen?
wenn ich in pgAdmin III keinen Angebe, erhalte ich folgende Fehlermeldung
Ein Fehler ist aufgetreten
ERROR: return type mismatch in function declared to return void
DETAIL: Function's final statement must not be a SELECT.
CONTEXT: SQL function "Test"
Und warum erstellst Du die SP nicht in einem Schritt?
ich habe die Stored Procedure in pgAdmin III angelegt
Und wie immer mein Standardtipp:
Problem isolieren, d.h. zuallererst die primitivsmoegliche SP erstellen, darauf aufbauen und entwickeln bis es nicht mehr funzt. Diesen Punkt zweifelsfrei und somit reproduzierbar feststellen und ggf. zur Diskussion stellen bzw. dokunutzend bearbeiten.
ich bekomme ja nicht mal ein einfaches SELECT hin ;-)
mfg
Twilo
Und wie immer mein Standardtipp:
Problem isolieren, d.h. zuallererst die primitivsmoegliche SP erstellen, darauf aufbauen und entwickeln bis es nicht mehr funzt. Diesen Punkt zweifelsfrei und somit reproduzierbar feststellen und ggf. zur Diskussion stellen bzw. dokunutzend bearbeiten.ich bekomme ja nicht mal ein einfaches SELECT hin ;-)
Genau da musst Du ran, also eine (parameterlose?) SELECT "Hello World!"-SP. Dann weiterschauen.