Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1
  • 2
  • 3
  • 4

ТЕМА:

Re: Динамический запрос и курсор 12 года 3 мес. назад #3878

  • Okey
  • Okey аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
create table dbo.tab1
([City] varchar(100),
 [Office] varchar(100),
 [Product] varchar(100)
)

insert into dbo.tab1
select 'КАРАГАНДА',NULL,NULL
union all
select 'Москва','Офис1','сырок'
union all
select 'Москва','Офис1','виноград сушеный изюм'
union all
select 'Москва','Офис2','огурцы соленые'
union all
select 'Москва','Офис1','халва'
union all
select 'Москва','Офис1','халва'
union all 
select 'Москва','Офис10','инжир'
declare 
@s varchar(max),
@pCity varchar(100),
@pOffice varchar(100),
@pProduct varchar(100)
set @s = 'select * from dbo.tab1 '

--set @pCity = 'КАРА' 
--set @pOffice = 'Офис1'
--set @pProduct = 'хал'

if not ((@pCity is NULL) and (@pOffice is NULL) and (@pProduct is NULL))
    set @s = @s + ' where '+' [City] like '''+isnull('%'+@pCity+'%','%')+''''+' and [Office] like '''+isnull('%'+@pOffice+'%','%')+''''+' and [Product] like '''+isnull('%'+@pProduct+'%','%')+''''
    
print @s
И что получается
--первый параметр
select * from dbo.tab1  where  [City] like '%КАРА%' and [Office] like '%' and [Product] like '%'
--второй параметр
select * from dbo.tab1  where  [City] like '%' and [Office] like '%Офис1%' and [Product] like '%'
--третий параметр
select * from dbo.tab1  where  [City] like '%' and [Office] like '%' and [Product] like '%хал%'
--ну и с двумя параметрами
select * from dbo.tab1  where  [City] like '%КАРА%' and [Office] like '%Офис10%' and [Product] like '%'

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Okey.

Re: Динамический запрос и курсор 12 года 3 мес. назад #3879

Еще так можно

CREATE OR REPLACE FUNCTION myFunc(VID IN VARCHAR2) RETURN TmyREC PIPELINED AS

vREC myREC;
text1 VARCHAR2(32767);
CUR_IZM sys_refcursor;
BEGIN
text1 := 'select f1,f2,f3 from nameuser.mytable where f1 = :1 ';
open CUR_IZM for text1 using VID;
LOOP
fetch CUR_IZM into vREC;
exit when CUR_IZM%notfound;
PIPE ROW(vREC);
end loop;
close CUR_IZM;
..............

RETURN bla-bla-bla;
end;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Динамический запрос и курсор 12 года 3 мес. назад #3880

По твоему вопросу есть хороший пример из документации

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
  • 3
  • 4
Время создания страницы: 0.201 секунд