Страница 1 из 1
Процедуры с использованием if..then..else...
Добавлено: 05 ноя 2005, 12:03
STEEL
Вообщем процедура с входяшей переменной типа VARCHAR, исходящей integer. Если входящее значение найдено в таблице, вернуть 0, если не найдено - 1.
Приведите примерчик.
Re: Процедуры с использованием if..then..else...
Добавлено: 05 ноя 2005, 14:26
Vit
STEEL писал(а):Вообщем процедура с входяшей переменной типа VARCHAR, исходящей integer. Если входящее значение найдено в таблице, вернуть 0, если не найдено - 1.
Приведите примерчик.
CREATE PROCEDURE PROCEDURE1 (
INPUT_VALUE VARCHAR(XX)
RETURNS ( RESULT INTEGER)
AS
BEGIN
SELECT COUNT(*) FROM TABLE1
WHERE COLUMN1=:INPUT_VALUE
INTO :RESULT;
if (:RESULT = 0) then RESULT = -1
else RESULT = 0;
SUSPEND
END;
Это будет работать на любом сервере. Если используется Firebird 1.5 и выше или Yahill то можно использовать Select без агрегата (быстрее работает), и проверять ROW_COUNT
Добавлено: 05 ноя 2005, 14:46
STEEL
А гды ты INPUT_VALUE сравниваешь с тем, что есть в таблице?
Добавлено: 05 ноя 2005, 20:47
Vit
STEEL писал(а):А гды ты INPUT_VALUE сравниваешь с тем, что есть в таблице?
Очень сорри. Правильно будет так
CREATE PROCEDURE PROCEDURE1 (
INPUT_VALUE VARCHAR(XX)
RETURNS ( RESULT INTEGER)
AS
BEGIN
SELECT COUNT(*) FROM TABLE1
WHERE COLUMN1
=:INPUT_VALUE
INTO :RESULT;
if (:RESULT = 0) then RESULT = -1
else RESULT = 0;
SUSPEND
END;
Добавлено: 06 ноя 2005, 00:13
STEEL
Выше приведенный код тоже нехрена бы не заработал. Дело в том, что даже если там не хватает какой-то точки с запятой, работать уже ничего не будет. Благо догадался

Законченный вариант.
Код: Выделить всё
СREATE PROCEDURE PROC (
BARCODE VARCHAR(15))
RETURNS (
RESULT INTEGER)
AS
begin
SELECT COUNT(*) FROM BARCODES
WHERE ARRAY=:BARCODE
INTO :RESULT;
IF (:RESULT = 0) THEN RESULT = -1;
ELSE RESULT = 0;
suspend;
Добавлено: 07 ноя 2005, 08:03
Ivan_Pisarevsky
"exists" вместо "count" пользовать не пробовали? Он несколько побыстрей работает
