我在数据库开发方面非常新,所以我对下面的示例有一些疑问:
函数f1() -语言sql
create or replace function f1(istr varchar)
returns text as $$
select 'hello! '::varchar || istr;
$$ language sql;函数f2() -语言plpgsql
create or replace function f2(istr varchar)
returns text as $$
begin select 'hello! '::varchar || istr; end;
$$ language plpgsql;select f1('world')或select f2('world')那样调用。select f1('world'),输出将是:
hello! worldselect f2('world')的输出:
错误:查询没有结果数据提示的目标:如果要放弃选择的结果,请使用“执行”。上下文: PL/pgSQL函数f11(字符变化),在SQL语句*错误*处第2行language sql或language plpgsql。任何与功能有关的有用链接或答案都将不胜感激。
发布于 2014-07-16 03:06:03
..。更好的选择是:
..。更好的选择是:
EXECUTE语句。需要特别注意避免SQL注入。更多详细信息:- [Postgres functions vs prepared queries](https://dba.stackexchange.com/a/49718/3684)- [How to pass a parameter into a function](https://dba.stackexchange.com/a/71442/3684)作业比其他程序语言要贵一些。采用一种不需要过多作业的编程风格。
- [Re: pl/pgsql functions outperforming sql ones?](https://www.postgresql.org/message-id/flat/0238E40E527049828C48675488422F6D@CAPRICA#0238E40E527049828C48675488422F6D@CAPRICA)- [Why can PL/pgSQL functions have side effect, while SQL functions can't?](https://stackoverflow.com/questions/51004980/why-can-pl-pgsql-functions-have-side-effect-while-sql-functions-cant/51033884#51033884)还应考虑:
要真正从PL/pgSQL函数返回,可以编写:
CREATE FUNCTION f2(istr varchar)
RETURNS text AS
$func$
BEGIN
RETURN 'hello! '; -- defaults to type text anyway
END
$func$ LANGUAGE plpgsql;还有其他方式:
发布于 2014-07-15 10:31:13
PL/PgSQL是一种基于SQL的PostgreSQL专用过程语言。。它有循环、变量、错误/异常处理等。不是所有的SQL都是有效的PL/PgSQL --例如,您发现没有INTO或RETURN QUERY就不能使用RETURN QUERY。PL/PgSQL也可以用于DO块中的一次性过程.
函数只能使用纯SQL,但是它们通常更高效,而且编写起来更简单,因为您不需要BEGIN ... END;块等等。SQL函数可能是内联的,PL/PgSQL不是这样的。
人们经常使用PL/PgSQL,而普通SQL就足够了,因为他们习惯于按程序进行思考。在大多数情况下,当您认为您需要PL/PgSQL时,您可能实际上并不需要。递归CTE、横向查询等通常可以满足大多数需求。
想了解更多信息..。看手册。
发布于 2018-11-14 14:36:27
只需将在函数中编写的select查询作为返回的值:
create or replace function f2(istr varchar)
returns text as $$
begin return(select 'hello! '::varchar || istr); end;
$$ language plpgsql;https://stackoverflow.com/questions/24755468
复制相似问题