Subject | RE: [ib-support] return value |
---|---|
Author | Rotandiko Sastroprawiro |
Post date | 2002-07-12T13:25:12Z |
Dear Svein,
I have replace with this :
SET TERM ##;
CREATE PROCEDURE MERGE_CONTENT (SRC INTEGER, DST INTEGER)
RETURNS (Result SMALLINT)
AS
BEGIN
UPDATE REF_MASTER SET CATEGORY_ID = :DST
WHERE
EXISTS(SELECT DISTINCT CONTENT_ID FROM REF_MASTER WHERE
CATEGORY_ID = :SRC
AND NOT EXISTS( SELECT CONTENT_ID FROM REF_MASTER WHERE
CATEGORY_ID = :DST))
AND CATEGORY_ID = :SRC;
DELETE FROM M_CATEGORIES WHERE CATEGORY_ID = :SRC;
Result = 1;
EXIT;
END ##
but when i "EXECUTE PROCEDURE MERGE_CONTENT(1,1)" it not return value of
Result , why ??
-----Original Message-----
From: Svein Erling Tysvær
[mailto:svein.erling.tysvaer@...]
Sent: Friday, July 12, 2002 9:15 PM
To: ib-support@yahoogroups.com
Subject: Re: [ib-support] return value
Diko,
there are two kinds of stored procedures - executable and those you select
from. SUSPEND should only be used with selectable SPs, which your SP does
not appear to be.
Another thing is that using IN (<subselect>) is terribly slow and that your
procedure is very likely to get serious performance problems once there
gets a bit of data into your tables. Get used to using EXISTS, which is
much faster. In your case that would be something like
UPDATE REF_MASTER A SET CATEGORY_ID = :DST
WHERE EXISTS(SELECT 1 FROM REF_MASTER B
WHERE A.CONTENT_ID = B.CONTENT_ID
AND B.CATEGORY_ID = :SRC
AND NOT EXISTS (SELECT 1 FROM REF_MASTER C
WHERE B.CONTENT_ID=C.CONTENT_ID
AND C.CATEGORY_ID = :DST))
AND CATEGORY_ID = :SRC;
HTH,
Set
To unsubscribe from this group, send an email to:
ib-support-unsubscribe@egroups.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
I have replace with this :
SET TERM ##;
CREATE PROCEDURE MERGE_CONTENT (SRC INTEGER, DST INTEGER)
RETURNS (Result SMALLINT)
AS
BEGIN
UPDATE REF_MASTER SET CATEGORY_ID = :DST
WHERE
EXISTS(SELECT DISTINCT CONTENT_ID FROM REF_MASTER WHERE
CATEGORY_ID = :SRC
AND NOT EXISTS( SELECT CONTENT_ID FROM REF_MASTER WHERE
CATEGORY_ID = :DST))
AND CATEGORY_ID = :SRC;
DELETE FROM M_CATEGORIES WHERE CATEGORY_ID = :SRC;
Result = 1;
EXIT;
END ##
but when i "EXECUTE PROCEDURE MERGE_CONTENT(1,1)" it not return value of
Result , why ??
-----Original Message-----
From: Svein Erling Tysvær
[mailto:svein.erling.tysvaer@...]
Sent: Friday, July 12, 2002 9:15 PM
To: ib-support@yahoogroups.com
Subject: Re: [ib-support] return value
Diko,
there are two kinds of stored procedures - executable and those you select
from. SUSPEND should only be used with selectable SPs, which your SP does
not appear to be.
Another thing is that using IN (<subselect>) is terribly slow and that your
procedure is very likely to get serious performance problems once there
gets a bit of data into your tables. Get used to using EXISTS, which is
much faster. In your case that would be something like
UPDATE REF_MASTER A SET CATEGORY_ID = :DST
WHERE EXISTS(SELECT 1 FROM REF_MASTER B
WHERE A.CONTENT_ID = B.CONTENT_ID
AND B.CATEGORY_ID = :SRC
AND NOT EXISTS (SELECT 1 FROM REF_MASTER C
WHERE B.CONTENT_ID=C.CONTENT_ID
AND C.CATEGORY_ID = :DST))
AND CATEGORY_ID = :SRC;
HTH,
Set
To unsubscribe from this group, send an email to:
ib-support-unsubscribe@egroups.com
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/