ちょいと迷惑だったストアドファンクション Tweet
以下のような既存パッケージがあり、共通ファンクションがあるのでこれを利用してくださいとのこと。
仕様書には、該当データが存在する場合はユーザ定義レコード型として定義されているmembersType、該当データが存在しない場合この関数はNULLを返すとある。フムフム。・・・・・でもなんとなく怪しい匂いが。。
で、ソースを除いてみたら以下の”ような”コードだった。どこがちょいと迷惑なのか分かりますか?
(私だったらコードレビュー時に指摘して変更させちゃうんだけどね。そのプロジェクトでは此の手のちょいと迷惑なのがかなりあったのよ。w)
2008/9/12 仕様書には、以下に少々追記
以下の例で利用している表は、Scottスキーマのemp表とdept表です。
CREATE OR REPLACE PACKAGE inconvenient_package
AS
TYPE employeesType IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER;
TYPE membersType IS RECORD (
deptNo dept.deptNo%TYPE
,deptName dept.dName%TYPE
,employees employeesType
);
FUNCTION inconvenient_function(iDeptNo IN dept.deptNo%TYPE)
RETURN membersType;
END inconvenient_package;
/
show errors
CREATE OR REPLACE PACKAGE PACKAGE BODY inconvenient_package
AS
FUNCTION inconvenient_function(iDeptNo IN dept.deptNo%TYPE)
RETURN membersType
IS
members membersType;
BEGIN
SELECT
deptNo
,dName
INTO
members.deptNo
,members.deptName
FROM
dept
WHERE
deptNo = iDeptNo
;
--
SELECT *
BULK COLLECT INTO
members.employees
FROM
emp
WHERE
deptno = iDeptNo
;
RETURN members;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN NULL;
END inconvenient_function;
END inconvenient_package;
/
show errors
次回へつづく。
| 固定リンク | 0


コメント