gpt4 book ai didi

mysql - 在 postgreSQL 中更改分隔符的简单方法

转载 作者:行者123 更新时间:2023-11-29 01:36:58 26 4
gpt4 key购买 nike

我想知道如何做到这一点,因为环顾四周后,我发现的都是漫长而复杂的方法来完成这项看似简单的工作。在 MySQL 中,我们有

 DELIMITER //
...function start
INSERT INTO table VALUES (1);
...function end//
DELIMITER ;

当我们想使用存储过程或函数时,这非常有用。我正在寻找 postgreSQL 中的等效项,如果有的话。

提前致谢!

最佳答案

MySQL DELIMITER 的问题在 PostgreSQL 中的表现完全不同。 (首先,大多数程序员不会使用 psql 命令行来输入一个函数;相反,您会编写一个 SQL 脚本文件并执行它,但这不是您问题的重点。)

在 PostgreSQL 中,函数体基本上是一个长字符串。该字符串基本上可以由不与其他任何内容冲突的任何内容分隔。在 SQL 标准中 - 以及在 PostgreSQL 文档中 - 使用单引号 ' ,而不是像 MySQL 那样只在不加引号的情况下启动函数体。因此,当您编写函数头 (CREATE FUNCTION ...) 时,您需要先编写一个引号来启动函数体,然后再编写任何分号来终止函数内的语句。这意味着 MySQL 的分号问题在 PostgreSQL 中不存在:解析器只是读取一个字符串并等待该字符串用右引号完成,然后命令以分号终止。

然而,还有更多内容。

在 PostgreSQL 中,惯例是使用 $$$anything_goes_here$,即所谓的美元引用,而不是 ' 来启动函数体。这样做的原因是它避免了必须转义函数体中嵌入的引号。参见 the docs有关此功能的说明。

通用函数定义看起来有点像这样:

CREATE FUNCTION my_func(arg1 data_type, ...) RETURNS data_type AS $body$
INSERT INTO foo(my_column) VALUES(arg1)
RETURNING some_column;
$body$ LANGUAGE sql;

请注意,PostgreSQL 中还有其他编程语言 - 最著名的是 PL/pgSQL,内置过程语言,还有 Perl、Python、Tcl、C 等的变体 - 并且都使用相同的函数定义包括分隔符在内的语法(根据 SQL 标准),只有函数体会有所不同。

您也可以为不同的函数使用不同的定界符,但单个函数的开始和结束定界符需要匹配。

关于mysql - 在 postgreSQL 中更改分隔符的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39252389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com