Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2012, 18:25   #1
malya
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 16
Вопрос хранимая процедура поиска в ibexpert

Добрый вечер.
Вот создаю процедуру поиска города, на выходе получают name города и его id

create or alter procedure POICK_GOROD (
GOROD_NAME varchar(20))
returns (
ID_GOROD smallint,
GOROD_NAME_N varchar(20))
as
begin
for select distinct gorod.id_gorod, gorod.gorod
from gorod
where gorod.gorod = :gorod_name
into :id_gorod, :gorod_name_n
do
suspend;
end

но как модифицировать эту процедуру, что бы поиск был так: введу С, а мне выдается все города с С первой: Саратов, Санкт-Петербург...
не знаю как синтаксически верно, куда подставить конструкцию like '%'
Подскажите...
malya вне форума Ответить с цитированием
Старый 16.03.2012, 19:05   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

с синтаксисом Firebird знаком слабо, так что может и не то (может кавычки и не нужны)
where gorod.gorod like ':gorod_name%'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2012, 19:22   #3
malya
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 16
По умолчанию

пробовала... если в кавычках, то понимает именно как значение = :gorod_name%
а без кавычек ошибка Invalid token...
malya вне форума Ответить с цитированием
Старый 16.03.2012, 19:34   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так:
where gorod.gorod like :gorod_name+'%'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2012, 19:49   #5
malya
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 16
По умолчанию

тоже ошибка((
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Dynamic SQL Error.
expression evaluation not supported.
malya вне форума Ответить с цитированием
Старый 16.03.2012, 20:04   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тогда объявляйте в процедуре varchar переменную, присваивйте ей это выражение, и в запросе используйте эту переменную
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2012, 20:28   #7
malya
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 16
По умолчанию

create or alter procedure POICK_GOROD (
GOROD_NAME varchar(20))
returns (
ID_GOROD smallint,
GOROD_NAME_N varchar(20))
as
DECLARE VARIABLE gn varchar(30);
begin
gn=:gorod_name+'%' ;
for select distinct gorod.id_gorod, gorod.gorod
from gorod
where gorod.gorod =:gn
into :id_gorod, :gorod_name_n
do
suspend;
end

та же ошибка..
malya вне форума Ответить с цитированием
Старый 16.03.2012, 20:29   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

попробуйте так:
Код:
where gorod.gorod like :gorod_name
а знак '%' в параметре передавайте.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 16.03.2012, 20:40   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

gn=gorod_name+'%' ; скорее всего так
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.03.2012, 20:56   #10
malya
Пользователь
 
Регистрация: 12.01.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
gn=gorod_name+'%' ; скорее всего так
опять та же ошибка...

DiemonStar а как передавать в параметре? при объявление: GOROD_NAME varchar(20)['%'] ?
malya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранимая процедура Jrcfyf БД в Delphi 1 14.02.2012 18:45
Хранимая процедура LizaVeta БД в Delphi 1 15.05.2010 10:42
Хранимая процедура. Cartman18 БД в Delphi 21 08.05.2010 18:56
хранимая процедура serg369 SQL, базы данных 4 07.02.2010 14:33
Хранимая процедура. nimf БД в Delphi 2 22.04.2008 13:16