数据库开发 是一个非常新的事物,因此我对以下示例有一些疑问:
函数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! world`
并 输出 为select f2('world')
:
错误:查询没有结果数据的目的地提示:如果要舍弃SELECT的结果,请改用PERFORM。上下文:SQL语句 *上的 PL /
pgSQL函数f11(字符变化)第2行
* 错误 **
language sql
或language plpgsql
。任何有用的链接或有关功能的答案将不胜感激。
是更好的选择:
用于 简单的标量查询 。没有太多的计划,最好节省任何开销。
对于 单个(或很少)每个会话调用 。通过PL / pgSQL必须提供的预备语句从计划缓存中得不到任何好处。见下文。
如果通常在更大的查询的上下文中调用它们,并且它们足够简单以进行 内联 。
由于缺乏使用任何程序语言(如PL / pgSQL)的 经验 。许多人都非常了解SQL,这就是SQL函数所需的全部内容。关于PL / pgSQL,很少有人能说相同的话。(尽管很简单。)
较短的代码。没有块开销。
是更好的选择:
显然,当您需要SQL函数中不提供的任何 过程元素 或 变量时 。
对于任何类型的 动态SQL ,您都可以在其中EXECUTE
动态构建和声明语句。需要特别注意以避免SQL注入。更多细节:
Postgres函数与准备好的查询
当您具有可以在多个地方 重用的* 计算 并且不能为此目的扩展CTE时。在SQL函数中,您没有变量,将被迫重复计算或写入表。dba.SE上的这个相关答案有并排的 代码示例 ,这些 示例 使用SQL函数/ plpgsql函数/带有CTE的查询来解决相同的问题: ***
如何将参数传递给函数
分配比其他程序语言要贵一些。改编一种编程样式,该样式不会使用过多的分配。
这是一个关于pgsql-performance的线程,讨论其中一些项目:
回复:pl / pgsql函数的性能优于sql的吗?
当您需要 捕获错误时 。
用于 触发功能 。
当包含DDL语句时,以与后续命令相关的任何方式更改对象或更改系统目录-因为SQL函数中的所有语句都是在PL / pgSQL函数按顺序计划和执行每个语句的同时进行解析的(就像准备好的语句一样)。看:
为什么PL / pgSQL函数会有副作用,而SQL函数却没有?
还要考虑:
要实际从PL / pgSQL函数 返回 ,可以编写:
CREATE FUNCTION f2(istr varchar)
RETURNS text AS
$func$
BEGIN
RETURN 'hello! '; -- defaults to type text anyway
END
$func$ LANGUAGE plpgsql;
我对数据库开发非常陌生,因此我对以下示例有一些疑问: 函数f1()-语言sql 函数f2()-语言plpgsql > 这两个函数都可以像或一样调用。 如果我调用选择f1('world'),输出将是: 并为输出: 错误:查询没有结果数据的目的地提示:如果要丢弃SELECT的结果,请改为使用PERFORM。上下文:PL/pgSQL函数f11(字符变化)第2行SQL语句 ********** 错误 **
本文向大家介绍高级语言和低级语言之间的区别,包括了高级语言和低级语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 让我们首先了解高级和低级语言- 高级语言 与低级语言相比,它易于解释和编译。 它可以被认为是程序员友好的语言。 很容易理解。 这很容易调试。 在维护方面很简单。 它要求将编译器/解释器翻译成机器代码。 它可以在不同的平台上运行。 它可以从一个位置移植到另一位置。 i.e与低级语言
本文向大家介绍Java和C语言之间的区别,包括了Java和C语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 Java和C都是编程世界中最流行的编程语言,由于它们的各种重要特征和特性,这两种语言都在全球范围内被广泛使用。 根据它们的功能,以下是Java和C之间的重要区别 序号 键 爪哇 C 1 介绍了 Java是在引入年份之后以C语言开发的,它是由James Gosling在1995年开发的
本文向大家介绍C语言中scanf()和gets()之间的区别,包括了C语言中scanf()和gets()之间的区别的使用技巧和注意事项,需要的朋友参考一下 在C语言中,都定义了和函数,以从外部源获取输入并将其作为输入传递给系统。现在,两个功能之间存在一些特性差异。 以下是和之间的重要区别- 序号 键 scanf()函数 gets()函数 1 定义 该方法可以从键盘读取输入,并根据给定的格式说明符将
问题内容: 在阅读了有关该主题的一些资料之后,我仍然不确定编译语言和解释语言之间的区别。有人告诉我这是Java和JavaScript之间的区别之一。有人能帮我理解吗? 问题答案: 编译语言和解释语言之间有什么区别? 区别 不 在于语言。它在 执行中 。 从我的系统中得到了答案,这是一个答案: 在编译的实现中,原始程序被转换为本地机器指令,这些指令直接由硬件执行。 在解释的实现中,原始程序被翻译成其
关于命令式语言和函数式(声明式语言的一个子集)编程语言之间的差异,有什么明确的答案,可以用实际例子来解释吗?有哪些主要的或最重要的命令式语言?函数语言呢? 我确实在这里读到了这个答案,但它实际上让我更加困惑-(函数式编程语言和命令式编程语言之间有什么区别?