0

従業員の名前を検索するためのストアドプロシージャを作成しましたが、ユーザーが名前を挿入できるように、または名前をまったく挿入できないように、オープンエンドにする必要があります。このロジックをどのように構成するか疑問に思っています。

基本的には以下のようなものです。名前がnullの場合は、名前のチェックをスキップしてください。以下の行は機能する必要がありますか?または私は台無しにしたことがあります。ありがとう。

search_employe(name, type)

SELECT * FROM employee_table e
WHERE e.type = type
AND IF name is not null THEN e.FNAME = name OR e.LName = name END IF
AND {...}
4

1 に答える 1

1

選択にはplsqlは必要ありませんが、元の投稿では「挿入」について説明しているため、説明が必要になる場合があります。つまり、パラメータを渡しますか?

SELECT * FROM employee_table e
WHERE e.type = type
AND (name is null OR e.FNAME = name OR e.LName = name)

呼び出し元が一致する名前を渡すストアドプロシージャを使用することはほとんど意味がない/非常に混乱していると思いますが、名前が登録されていない従業員を返送して、一致と見なすこともできます。そのような紛らわしいデータを本当に返したい場合(QAにはフィールドデーがあります)、それを行うことができます:

SELECT * FROM employee_table e
WHERE e.type = type
AND 
(
    -- matching names, or the value was passed in null
    (name is null OR e.FNAME = name OR e.LName = name)
    OR
    -- value passed in, but the employee has no registered name
    (name is not null AND e.FNAME is null AND e.LName is null)
)

しかし、データの要件と整合性を理解するために、これを設計図に戻すことを強くお勧めします。

于 2013-02-13T23:25:42.670 に答える