Thread: BUG #14184: Function is running correct but not showing output
VGhlIGZvbGxvd2luZyBidWcgaGFzIGJlZW4gbG9nZ2VkIG9uIHRoZSB3ZWJz aXRlOgoKQnVnIHJlZmVyZW5jZTogICAgICAxNDE4NApMb2dnZWQgYnk6ICAg ICAgICAgIFp1YmFpciBBbGFtCkVtYWlsIGFkZHJlc3M6ICAgICAgenppYTg4 QGdtYWlsLmNvbQpQb3N0Z3JlU1FMIHZlcnNpb246IDkuNS4zCk9wZXJhdGlu ZyBzeXN0ZW06ICAgd2luZG93czcteDY0KDY0IGJpdCkKRGVzY3JpcHRpb246 ICAgICAgICAKCnBvc3RncmVzcWwtOS41LjMtMS13aW5kb3dzLXg2NA0KLS0t LS08PDw8PDxNeSBmdW5jdGlvbiBDb2Rpbmc+Pj4+LS0tLQ0KQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gRkFDVE9SSUFMKElOIE5VTSBCSUdJTlQsT1VU IEZBQ1QgQklHSU5UKSBBUyAkJA0KREVDTEFSRQ0KCUZBQ1QgQklHSU5UOw0K IEJFR0lODQogCUZPUiBJIElOIFJFVkVSU0UgMS4uTlVNIExPT1ANCgkJRkFD VDo9RkFDVCpJOw0KCUVORCBMT09QOw0KRU5EOw0KJCQgTEFOR1VBR0UgcGxw Z3NxbDsNCi0tLS0tPDw8PDw8PDw8PDw8Pj4+Pj4+Pj4+Pj4+Pi0tLS0tDQpT RUxFQ1QqIEZST00gRkFDVE9SSUFMKDUpOw0KDQpJVCBTSE9XSU5HIE5VTEwg VkFMVUUuLi4KCg==
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
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
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