<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Zwrócenie stringu z funkcji]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1861</link>
		<description><![CDATA[Najświeższe odpowiedzi w Zwrócenie stringu z funkcji.]]></description>
		<lastBuildDate>Mon, 24 Jun 2013 06:08:03 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4621#p4621</link>
			<description><![CDATA[Dzięki, fajnie działa
zmieniłem pierwszy parametr na "nazwa varchar" i w funkcji wpis

case when length(coalesce(prefix,'')||coalesce(sufix,''))=0 then '='''||nazwa||'''' else 'like '''||coalesce(prefix,'')||nazwa||coalesce(sufix,'')||'''' end

Wywołuje np tak
select * from f_tabela('a','%','%')  wyszukuje uzytkowników z literką 'a' (like '%a%')

Jeszcze raz dzięki]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Mon, 24 Jun 2013 06:08:03 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4621#p4621</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4614#p4614</link>
			<description><![CDATA[można i to osiągnąć - napisz funkcje jak niżej (popraw w niej schemat na taki jaki wykorzystujesz


CREATE OR REPLACE FUNCTION public.f_tabela(id integer,prefix varchar(1),sufix varchar(1)) RETURNS SETOF public.tabela AS
$BODY$
DECLARE
    r  public.tabela;
BEGIN
    raise notice 'SQL wyglada tak %','SELECT * FROM public.tabela WHERE uzytkownik '||case when length(coalesce(prefix,'')||coalesce(sufix,''))=0 then '=''jola''' else 'ilike '''||coalesce(prefix,'')||'jola'||coalesce(sufix,'')||'''' end;
    FOR r IN execute 'SELECT * FROM public.tabela WHERE uzytkownik '||case when length(coalesce(prefix,'')||coalesce(sufix,''))=0 then '=''jola''' else 'ilike '''||coalesce(prefix,'')||'jola'||coalesce(sufix,'')||'''' end
    LOOP
        RETURN NEXT r; 
    END LOOP;
    RETURN;
END
$BODY$
LANGUAGE 'plpgsql' ;

select * from f_tabela(1,'%','%')
union all select * from f_tabela(1,'%',null)
union all select * from f_tabela(1,null,'%')
union all select * from f_tabela(1,null,null)]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 21 Jun 2013 12:54:30 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4614#p4614</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4613#p4613</link>
			<description><![CDATA[[quote=c_michal]LIKE to polecenie SQL więc zmien w funkcji linie z RETURN na RETURN '%jola%';
a następnie wykonaj swój select

Select * from schemat.tabela where uzytkownik like schemat.atest(1);[/quote]

Działa, może za dużo wymagam, ale tak sobie wymyśliłem, że funkcja mogła by być uniwersalna i w zależności od warunków zwracać np:
= 'jola';
lub 
like '%jola';

a zapytanie było by zawsze stałe, bez = lub like w zapytaniu

Select * from schemat.tabela where uzytkownik schemat.atest(1)

Dzięki za pomoc]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Fri, 21 Jun 2013 11:56:44 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4613#p4613</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4612#p4612</link>
			<description><![CDATA[LIKE to polecenie SQL więc zmien w funkcji linie z RETURN na RETURN '%jola%';
a następnie wykonaj swój select

Select * from schemat.tabela where uzytkownik like schemat.atest(1);]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 21 Jun 2013 11:44:30 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4612#p4612</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4611#p4611</link>
			<description><![CDATA[[quote=c_michal]musi działać - zobacz poniższy skrypt, działa jak tra la la :):)
[/quote]

Już działa, problem był w schematach (akurat tutaj ich nie pokazałem), ale przy tabeli był schemat, a przy funkcji nie. Twój przykład zadziałał i mój też. Dlatego kapnąłem się że schemat tutaj miesza. Teraz podaję tabelę i funkcję ze schematem.

Select * from schemat.tabela where uzytkownik = schemat.atest(1);

Idąc dalej zmieniłem funkcję na 

CREATE OR REPLACE FUNCTION atest (pracownik integer)
RETURNS varchar AS
$body$
begin
    return 'like ''%jola%''';

---return '= ''jola'''; -- tez nie dziala
  end;
$body$
LANGUAGE 'plpgsql';

select * from schemat.atest(1)   zwraca wynik  like '%jola%'
ale 
Select * from schemat.tabela where uzytkownik schemat.atest(1); nic nie zwraca tylko że jest błąd przy schemacie funkcji.]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Fri, 21 Jun 2013 11:23:06 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4611#p4611</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4610#p4610</link>
			<description><![CDATA[musi działać - zobacz poniższy skrypt, działa jak tra la la :):)

create table tabela (
 id serial primary key 
,uzytkownik varchar(50) not null
);
CREATE OR REPLACE FUNCTION atest (pracownik integer)
RETURNS varchar AS
$body$
begin
    return 'jola';
  end;
$body$
LANGUAGE 'plpgsql';

insert into tabela(uzytkownik) values ('jola'),('magda'),('paweł');

Select * from tabela where uzytkownik=atest(1);]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 21 Jun 2013 10:36:53 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4610#p4610</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4609#p4609</link>
			<description><![CDATA[[quote=sekol]Witam,

Spróbuj zmienić w funkcji  
return '''jola'''; 
na 
return 'jola';[/quote]

Nic to nie daje

c_michal
Użytkownik jest bez spacji, cudzysłowi itp
wszystko jest małymi literami

funkcja zwraca 'jola'

Select * from tabela where uzytkownik = 'jola';  działa ok

To nie działa,column "jola" does not exist

Select * from tabela where uzytkownik = jola;
Select * from tabela where uzytkownik = "jola";

pole uzytkownik jest varchar]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Fri, 21 Jun 2013 09:51:34 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4609#p4609</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4608#p4608</link>
			<description><![CDATA[Mam dwa pytania:
1. Czy pole  "uzytkownik" w tabeli tabela przechowuje nazwę jola czy jola w pojedyńczym cudzysłowie 
jeśli wartość przechowywana nie zawiera cudzysłowu to twoja funkcja powinna zwracać RETURN 'jola';

2 czy to pole przechowuje nazwy użytkownika pisane samymi małymi literami?
Jeśli nie to powinno się napisać Select * from tabela where upper(uzytkownik) =upper(atest (1));

Sprawdź jeszcze czy nie masz w polu użytkownik spacji na końcu lub na początku]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 21 Jun 2013 09:21:12 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4608#p4608</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4607#p4607</link>
			<description><![CDATA[Witam,

Spróbuj zmienić w funkcji  
return '''jola'''; 
na 
return 'jola';]]></description>
			<author><![CDATA[dummy@example.com (sekol)]]></author>
			<pubDate>Fri, 21 Jun 2013 09:10:24 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4607#p4607</guid>
		</item>
		<item>
			<title><![CDATA[Zwrócenie stringu z funkcji]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4606#p4606</link>
			<description><![CDATA[Witam
Select * from tabela where uzytkownik = 'jola';   działa

Potrzebuje funkcję która zwróci mi tego użytkownika do porównania

CREATE OR REPLACE FUNCTION atest (pracownik integer)
RETURNS varchar AS
$body$
 begin
	return '''jola''';
  end;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY DEFINER
COST 100;

select * from atest(1)   zwraca wynik   'jola'
ale
Select * from tabela where uzytkownik =atest (1);   nic nie zwraca

Próbowałem też tak, ale również nic nie zwraca
Select * from tabela where uzytkownik = quote_literal(atest(1))

Select * from tabela where uzytkownik = '||quote_literal(jola)||'  też nic nie zwraca

Nie wiem dlaczego tak jest

W przyszłości chciałbym napisać funkcję (funkcja1(coś tam)) która zwróciła by np taki wynik w zależności od warunków:

= 'jola';
like '%ol%';

ja podstawiał bym tylko funkcje do zapytania

Select * from tabela where uzytkownik funkcja1(coś tam)
Było by np Select * from tabela where uzytkownik = 'jola';

Select * from tabela where uzytkownik funkcja1(coś tam)
Było by np Select * from tabela where uzytkownik like '%ol%';

Może ktoś mnie pokieruje jak to rozwiązać
Z góry dzięki]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Fri, 21 Jun 2013 07:23:49 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4606#p4606</guid>
		</item>
	</channel>
</rss>
