Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > представление vs просто_запрос vs хр_процедура


Автор: Aprol 26.8.2007, 16:55
1)Давайте все же обсудим что же лучше для использования например такого кода:
Код

select * from table1;

То есть выборка из таблицы.
Что является плюсами и минусами у этих способов получения данных?
2)и почему нельзя создать представление с параметром? 
Код

create view(id)
as
select id from Tabl1 where age=:parametr1;

Автор: Bose 26.8.2007, 17:36
По-моему не совсем корректно поставлен вопрос. 

Что лучше использовать, в большей степени зависит от того, что именно нужно получить. Если нужно просто выбрать все записи только из одной таблицы без фильтров, то лучше всего прямой select * from table1 

Если нужно из одной таблицы выбирать несколько наборов данных по не изменяющимся критериям, то лучше наверное использовать VIEW.

А если при выборке нужно помимо данных из основной таблицы, эти данные нужно ещё и обработать(в зависимости от каких-либо условий(if .. then)), то лучшим вариантом будут процедуры.

Автор: Aprol 26.8.2007, 18:04
У меня четвертый вариантsmile
выборка из нескольких таблиц и изменяющиеся параметры фильтрации

Автор: Bose 26.8.2007, 18:20
Цитата(Aprol @  26.8.2007,  18:04 Найти цитируемый пост)
выборка из нескольких таблиц и изменяющиеся параметры фильтрации

Тогда есть ещё 2 варианта:
1) Фильтр конструирется в приложении в виде строки для Where (...). Т.е. фактически, приложение само конструирует запрос. Выборка может идти из чего угодно, хотя сложные/медленные stored procedure лучше не использовать. 
2) Создаётся Stored Procedure, в которая и возвращает отфильтрованный набор данных. Фильтры передаются в процедуру как входные параметры. 

Автор: Aprol 26.8.2007, 18:43
вся проблема что я не могу получить выборку в клиентском приложении .в delphi не могу замутить
можно было бы сделать вот так

Код


 select * from table1;  

но мне сказали так плохо.

Автор: Anark1 27.8.2007, 09:36
Aprol,
можно задачу?
В дельфи достаточно средств для работы с InterBase.
И почему не можешь получить эту самую выборку?
Для работы с ХП есть TIBStoredProc. Для выполнения запросов TIBDataSet.

Автор: ksili 1.9.2007, 09:55
Цитата(Aprol @  26.8.2007,  23:43 Найти цитируемый пост)
код SQL
1:

 select * from table1;  


но мне сказали так плохо. 


Почему плохо? Если тебе нужны все поля, пиши *, если не все, то пиши в запросе конкретно какие нужны

Автор: Akella 7.9.2007, 16:43
Aprol, ничё не понял, то ты одно хочешь обсудить, то потом у тебя какой-то четвёртый вариант, ты определись, что ты хочешь знать  smile 

Автор: Aprol 9.9.2007, 12:39
Упс я под table1 имел ввиду хранимую процндуру.
Просто нужна выборка, использовать query  не хочется ввиду большей безопасности хр. процедур.
Вот поэтому такой код будет приемлим?
Код

select * from procedure1;

Автор: Akella 10.9.2007, 10:07
а чем опасен
Код
select * from Table1;
?

Автор: Aprol 11.9.2007, 08:47
Ну вот я использую например ibquery, а разве какой-нибудь злоумышленник не сможет изменить запрос и взять конфиденциальные данные из базы?

Автор: ksili 11.9.2007, 08:49
Код

select * from procedure1;

это тоже запрос - запрос результатов процедуры

Автор: Akella 12.9.2007, 09:17
Цитата(ksili @  11.9.2007,  08:49 Найти цитируемый пост)
это тоже запрос - запрос результатов процедуры 

конечно, можно же и внутренности процедуры изменить  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)