Обсуждение: Some problems with (my?) PlSQL

Поиск
Список
Период
Сортировка

Some problems with (my?) PlSQL

От
"Rui Pacheco"
Дата:
Hi,

I'm getting quite impressed with postgresql, but in the other end quite
disappointed with plpgsql...
I've been working successfully with postgresql 7.1.2, but I cannot use my
actual plpgsql in 7.2.1 (details bellow).

I wonder if there is already support for returning a rowset directly
(without that return cursor pointer workaround)?

Thanks in advance.

Rui


Parser error with many arguments:

----- example code:
DROP FUNCTION devUsersUpdate (INTEGER, VARCHAR, VARCHAR, VARCHAR, VARCHAR,
VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR);
CREATE FUNCTION devUsersUpdate (INTEGER, VARCHAR, VARCHAR, VARCHAR, VARCHAR,
VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR, VARCHAR)
RETURNS INTEGER AS '
DECLARE
intId ALIAS FOR $1;strLogin ALIAS FOR $2;strPassword ALIAS FOR $3;strEmail ALIAS FOR $4;strTitle ALIAS FOR
$5;strFirstNameALIAS FOR $6;strLastName ALIAS FOR $7;strDateCreation ALIAS FOR $8;strDateLastAccess ALIAS FOR
$9;strAccLockedALIAS FOR $10;strAccDisabled ALIAS FOR $11;strPasswdChallenge ALIAS FOR $12;strPasswdChallengeResponse
ALIASFOR $13;
 

BEGIN
UPDATE TS_USERS SET LOGIN = strLogin, EMAIL = strEmail, TITLE = strTitle, FIRST_NAME =
strFirstName, LAST_NAME = strLastName, DATE_CREATION = TIMESTAMP (strDateCreation), DATE_LAST_ACCESS = TIMESTAMP
(strDateLastAccess),ACC_LOCKED =
 
strAccLocked, ACC_DISABLED = strAccDisabled, PASSWD_CHALLENGE = strPasswdChallenge, PASSWD_CHALLENGE_RESPONSE =
strPasswdChallengeResponseWHEREID = intId;
 
RETURN 1;
END;
' LANGUAGE 'plpgsql';
-------

While not reaching the limit of arguments, this function, when called, gives
me this error:

Query error [SELECT devUsersUpdate ('1', 'root', '', 'root@somehost.com',
'', 'Super', 'User', '0001-01-01', '0001-01-01', 'N', 'N', '', '')]: ERROR:
parser: parse error at or near "$6"

which, by the way, didn't happened in postgresql 7.1.2...

Anyone had this problem or knows the answer to it?




Re: Some problems with (my?) PlSQL

От
Stephan Szabo
Дата:
On Tue, 4 Jun 2002, Rui Pacheco wrote:

> BEGIN
>
>  UPDATE TS_USERS SET
>   LOGIN = strLogin, EMAIL = strEmail, TITLE = strTitle, FIRST_NAME =
> strFirstName,
>   LAST_NAME = strLastName, DATE_CREATION = TIMESTAMP (strDateCreation),
>   DATE_LAST_ACCESS = TIMESTAMP (strDateLastAccess), ACC_LOCKED =
> strAccLocked,
>   ACC_DISABLED = strAccDisabled, PASSWD_CHALLENGE = strPasswdChallenge,
>   PASSWD_CHALLENGE_RESPONSE = strPasswdChallengeResponse
>  WHERE ID = intId;
>
>  RETURN 1;
> END;
> ' LANGUAGE 'plpgsql';
> -------
>
> While not reaching the limit of arguments, this function, when called, gives
> me this error:
>
> Query error [SELECT devUsersUpdate ('1', 'root', '', 'root@somehost.com',
> '', 'Super', 'User', '0001-01-01', '0001-01-01', 'N', 'N', '', '')]: ERROR:
> parser: parse error at or near "$6"

Wierd that it would say $6.  You might be getting bitten by the changes to
timestamp.  Maybe using "timestamp"(strDateCreation) and
"timestamp"(strDateLastAccess) would make it work.



Re: Some problems with (my?) PlSQL

От
"Rui Pacheco"
Дата:
> > Query error [SELECT devUsersUpdate ('1', 'root', '',
'root@somehost.com',
> > '', 'Super', 'User', '0001-01-01', '0001-01-01', 'N', 'N', '', '')]:
ERROR:
> > parser: parse error at or near "$6"
>
> Wierd that it would say $6.  You might be getting bitten by the changes to
> timestamp.  Maybe using "timestamp"(strDateCreation) and
> "timestamp"(strDateLastAccess) would make it work.

That's it! Thanks a lot for your tip! :)

Rui