Обсуждение: BUG #14184: Function is running correct but not showing output

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

BUG #14184: Function is running correct but not showing output

От
zzia88@gmail.com
Дата:
VGhlIGZvbGxvd2luZyBidWcgaGFzIGJlZW4gbG9nZ2VkIG9uIHRoZSB3ZWJz
aXRlOgoKQnVnIHJlZmVyZW5jZTogICAgICAxNDE4NApMb2dnZWQgYnk6ICAg
ICAgICAgIFp1YmFpciBBbGFtCkVtYWlsIGFkZHJlc3M6ICAgICAgenppYTg4
QGdtYWlsLmNvbQpQb3N0Z3JlU1FMIHZlcnNpb246IDkuNS4zCk9wZXJhdGlu
ZyBzeXN0ZW06ICAgd2luZG93czcteDY0KDY0IGJpdCkKRGVzY3JpcHRpb246
ICAgICAgICAKCnBvc3RncmVzcWwtOS41LjMtMS13aW5kb3dzLXg2NA0KLS0t
LS08PDw8PDxNeSBmdW5jdGlvbiBDb2Rpbmc+Pj4+LS0tLQ0KQ1JFQVRFIE9S
IFJFUExBQ0UgRlVOQ1RJT04gRkFDVE9SSUFMKElOIE5VTSBCSUdJTlQsT1VU
IEZBQ1QgQklHSU5UKSBBUyAkJA0KREVDTEFSRQ0KCUZBQ1QgQklHSU5UOw0K
IEJFR0lODQogCUZPUiBJIElOIFJFVkVSU0UgMS4uTlVNIExPT1ANCgkJRkFD
VDo9RkFDVCpJOw0KCUVORCBMT09QOw0KRU5EOw0KJCQgTEFOR1VBR0UgcGxw
Z3NxbDsNCi0tLS0tPDw8PDw8PDw8PDw8Pj4+Pj4+Pj4+Pj4+Pi0tLS0tDQpT
RUxFQ1QqIEZST00gRkFDVE9SSUFMKDUpOw0KDQpJVCBTSE9XSU5HIE5VTEwg
VkFMVUUuLi4KCg==

Re: BUG #14184: Function is running correct but not showing output

От
Kevin Grittner
Дата:
On Mon, Jun 13, 2016 at 8:40 AM,  <zzia88@gmail.com> wrote:

> -----<<<<<<My function Coding>>>>----
> CREATE OR REPLACE FUNCTION FACTORIAL(IN NUM BIGINT,OUT FACT BIGINT) AS $$
> DECLARE
>         FACT BIGINT;
>  BEGIN
>         FOR I IN REVERSE 1..NUM LOOP
>                 FACT:=FACT*I;
>         END LOOP;
> END;
> $$ LANGUAGE plpgsql;
> -----<<<<<<<<<<<<>>>>>>>>>>>>>-----
> SELECT* FROM FACTORIAL(5);
>
> IT SHOWING NULL VALUE...

FACT is NULL on declaration.  NULL (unknown) multiplied by anything is NULL.

--
Kevin Grittner
EDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Re: BUG #14184: Function is running correct but not showing output

От
Tom Lane
Дата:
zzia88@gmail.com writes:
> CREATE OR REPLACE FUNCTION FACTORIAL(IN NUM BIGINT,OUT FACT BIGINT) AS $$
> DECLARE
>     FACT BIGINT;
>  BEGIN
>      FOR I IN REVERSE 1..NUM LOOP
>         FACT:=FACT*I;
>     END LOOP;
> END;
> $$ LANGUAGE plpgsql;

> SELECT* FROM FACTORIAL(5);

> IT SHOWING NULL VALUE...

Yes.  You didn't initialize FACT to something non-null (like, say, 1)
and multiplying null by anything will produce another null.

I think the REVERSE in your loop is wrong, too.

            regards, tom lane

Re: BUG #14184: Function is running correct but not showing output

От
Tom Lane
Дата:
zubair alam <zzia88@gmail.com> writes:
> CREATE OR REPLACE FUNCTION FACTORIAL(IN NUM BIGINT,OUT FACT BIGINT) AS $$
> DECLARE
> FACT BIGINT:=1;
>  BEGIN
>   FOR I IN REVERSE 1..NUM LOOP
> FACT:=FACT*I;
> END LOOP;
> END;
> $$ LANGUAGE plpgsql;

> if i am doing FACT BIGINT:=1; the also it giving the output NULL;

Well, the *third* bug in your function is that you're re-declaring
FACT as a local variable, thereby masking the output parameter.

            regards, tom lane