【发布时间】:2011-01-08 17:49:01
【问题描述】:
我有这么大的代码,我想在其中搜索 3 件事:
1- 查找与搜索匹配的所有订单(已交付和未交付):
2- 查找与搜索匹配的所有未决订单;
3-查找与搜索匹配的所有已交付订单;
create or replace
function search_order(search IN VARCHAR2, a_option NUMBER) RETURN types.ref_cursor
AS
orders_cursor types.ref_cursor;
BEGIN
if search is not null then
if a_option = 0 then /*case 1*/
OPEN orders_cursor FOR
select value(f), value(p),i.qtd_if, i.prec_total_if , forn.nome_fornecedor
from item_fornecimento i, produto p ,fornecimento f, fornecedor forn
where f.id_fornecimento in (select f.id_fornecimento from fornecimento f where f.id_fornecedor in
(select f1.id_fornecedor from fornecedor f1 where f1.nome_fornecedor LIKE '%'||search||'%'))
and f.id_fornecimento= i.id_fornecimento and i.id_prod= p.id_prod and
f.id_fornecedor = forn.id_fornecedor
order by forn.nome_fornecedor,f.data_encomenda desc,p.nome_prod asc;
RETURN orders_cursor;
ELSIF a_option = 1 then /*case 2*/
OPEN orders_cursor FOR
(...)
where f.id_fornecimento in (select f.id_fornecimento from fornecimento f where f.id_fornecedor in
(select f1.id_fornecedor from fornecedor f1 where f1.nome_fornecedor LIKE '%'||search||'%')and f.data_entrega is null)
(...)
RETURN orders_cursor;
ELSE /* case 3*/
OPEN orders_cursor FOR
(...)
where f.id_fornecimento in (select f.id_fornecimento from fornecimento f where f.id_fornecedor in
(select f1.id_fornecedor from fornecedor f1 where f1.nome_fornecedor LIKE '%'||search||'%')and f.data_entrega is not null)
(...)
RETURN orders_cursor;
end if;
end if;
END;
如果我的搜索不为空,则此方法有效,但如果是,我想稍微修改一下内部选择并将其变成如下内容:
(select f1.id_fornecedor from fornecedor f1 where f1.nome_fornecedor LIKE '%'||search||'%')and f.data_entrega is not null) 转 --> (select f1.id_fornecedor from fornecedor f1)and f.data_entrega is not null)
所以我有 3 个搜索条件,我想知道是否可以使用大小写、解码甚至其他带有参数的光标来执行此内部选择:
- 如果搜索字符串不为空,则 LIKE;
- 如果字符串为空,则不带 LIKE;
但是我还没有看到任何这样的例子,事情真的会变得非常混乱。 有人可以用相同的代码帮助新手吗?
【问题讨论】:
标签: sql oracle plsql cursor plsqldeveloper