[SQL] Функция, которая сравнивает две строки?
Ты хорошо вопрос продумал?
---
...Я работаю антинаучным аферистом...
---
...Я работаю антинаучным аферистом...
Наверно, хотя не знаю, мне вроде так передали..должно получится что-то вроде
declare ........
function.......(x[],y[]) IS или по-SQL-ному...не хнаю как...VARCHAR...что ли
begin....
end.......
function("a","ab")---------->FALSE
function("b","b")----------->TRUE
declare ........
function.......(x[],y[]) IS или по-SQL-ному...не хнаю как...VARCHAR...что ли
begin....
end.......
function("a","ab")---------->FALSE
function("b","b")----------->TRUE
Получилось
DECLARE
result varchar2(10);
FUNCTION MyFunc(Strike1 VARCHAR2, Strike2 VARCHAR2)
RETURN varchar2 IS
BEGIN
IF(Strike1 = Strike2) THEN
RETURN '1';
ELSE
RETURN '0';
end if;
END;
begin
rezalt := MyFunc('a', 'ab');
dbms_output.put_line(result);
end;
DECLARE
result varchar2(10);
FUNCTION MyFunc(Strike1 VARCHAR2, Strike2 VARCHAR2)
RETURN varchar2 IS
BEGIN
IF(Strike1 = Strike2) THEN
RETURN '1';
ELSE
RETURN '0';
end if;
END;
begin
rezalt := MyFunc('a', 'ab');
dbms_output.put_line(result);
end;
афигеть 

Че афигеть? Я и назвал его ламерским вопросом...Кто же спорит, что тебе это легко? А мне нужно было быстренько такую херню написать именно на PL/SQL (SQL я видел 1 раз в жизнитолько что мне сказали, что, оказывается... SQL=Structured Query Language...оставь при себе свои амбиции
почему манагер занимаются прогрммированием?
он должн впаривать чего-нибудь кому-нмбудь
он должн впаривать чего-нибудь кому-нмбудьМанагер сменил немного работу....а там надо самую малость SQL понимать....что поделаешь
SQL был специально придуман для всяких там бухгалтеров и манагеров.
Составление запросов на SQL лично я не считаю программированием, аргументы я приводил уже как-то.
Составление запросов на SQL лично я не считаю программированием, аргументы я приводил уже как-то.
Все-таки я задам вопрос, почему нельзя сделать просто?:
Зачем обязательно писать такую громоздкую функцию?
rezalt := 'a' = 'ab';
Зачем обязательно писать такую громоздкую функцию?
не знаю, там немного другое мне надо было(ниже) сразу..я не подумал особо, да и не знал как там операторы работают..К тому же нужна ф-ция, возвращающая что-то, а если IF-THEN-ELSE в моем коде заменить на
rezalt := strike1 = strike2, не спорю - коротко...но ':=' - не всем нравится. IF-THEN, DECODE - наверно, лучше
че бы ты сделал, если бы надо было сравнивать не 2 строки, а 1 слово и ячейки столбца? Если это 1 слово есть хотя бы в 1 строке в столбце таблицы (SELECT Columb_Name FROM Table_Name)- TRUE, нет - False
rezalt := strike1 = strike2, не спорю - коротко...но ':=' - не всем нравится. IF-THEN, DECODE - наверно, лучше
че бы ты сделал, если бы надо было сравнивать не 2 строки, а 1 слово и ячейки столбца? Если это 1 слово есть хотя бы в 1 строке в столбце таблицы (SELECT Columb_Name FROM Table_Name)- TRUE, нет - False
например, так:
result = 0 != (select count(*) from Table_Name where Column_Name = 'Искомое слово')
а в теле ф-ции это как выглядит(если не сложно)? Нужно еще чтобы, например, если исходное слово "test", а в единственной строке - "testiruem" - выдавала FALSE
> теле ф-ции это как выглядит
Что эта функция должна брать на входе?
> Нужно еще чтобы, например, если исходное слово "test", а в единственной строке - "testiruem" - выдавала FALSE
Приведенный запрос именно так себя и ведет.
Что эта функция должна брать на входе?
> Нужно еще чтобы, например, если исходное слово "test", а в единственной строке - "testiruem" - выдавала FALSE
Приведенный запрос именно так себя и ведет.
>Нужно еще чтобы, например, если исходное слово "test", а в единственной строке - "testiruem" - выдавала FALSE
Стормозил!
На входе Strike VARCHAR2(10) и сравнение Strike и (SELECT Columb_Name FROM Table_Name )
Стормозил!
На входе Strike VARCHAR2(10) и сравнение Strike и (SELECT Columb_Name FROM Table_Name )
FUNCTION MyFunc(Strike VARCHAR2)
RETURN bool IS
BEGIN
return 0 != (select count(*) from Table_Name where Column_Name = Strike);
END;
return 0 != (select count(*) from Table_Name where Column_Name = Strike);
Subquery not allowed in this context
Subquery not allowed in this context
return 0 != (select count(*) from Table_Name where Column_Name = Strike);
аналогично
IF(SELECT COUNT(*) FROM Table_Name WHERE Columb_Name = Strike) THEN
RETURN '1';
ELSE
RETURN '0';
END IF;
Ругается именно на SELECT
аналогично
IF(SELECT COUNT(*) FROM Table_Name WHERE Columb_Name = Strike) THEN
RETURN '1';
ELSE
RETURN '0';
END IF;
Ругается именно на SELECT
Не работает!
Что не работает?
Когда не работает?
Что при это выдается?
Что должно выдаваться?
ps
Телепаты общаются без форума.
Когда не работает?
Что при это выдается?
Что должно выдаваться?
ps
Телепаты общаются без форума.
Не работает ф-ция
Выдает ошибку "Subquery not allowed in yhis context", PL-SQL 00103 "Encounterd operator "SELECT", line...
т.е. IF(SELECT COUNT(*) FROM Table WHERE Columb=Strike) THEN
RETURN '1';
такой селект нельзя творить
Выдает ошибку "Subquery not allowed in yhis context", PL-SQL 00103 "Encounterd operator "SELECT", line...
т.е. IF(SELECT COUNT(*) FROM Table WHERE Columb=Strike) THEN
RETURN '1';
такой селект нельзя творить
напиши так:
declare @q int
set @q = (select ..)
if (@q != 0)
Все, спасибо! Вот так написал:
FUNCTION MyFunc(Strike VARCHAR2)
RETURN VARCHAR IS
BEGIN
SELECT COUNT(*)
INTO s
FROM Table
WHERE Columb = Strike;
IF(s>1) then RETURN '1';
ELSE RETURN '0';
END IF;
END;
FUNCTION MyFunc(Strike VARCHAR2)
RETURN VARCHAR IS
BEGIN
SELECT COUNT(*)
INTO s
FROM Table
WHERE Columb = Strike;
IF(s>1) then RETURN '1';
ELSE RETURN '0';
END IF;
END;
Только все-таки больше 0 , а не больше 1.
Оставить комментарий
vladi1
Плиз, напишите код функции в SQL, которая сравнивает 2 строки на входе, TRUE, если они равны, FALSE, если нет...или хотя бы напишите как обьявляется массив символьный в SQL, и как считывать его по символу(что-то вроде getchar там циклик небось какой-нить, наверно)...