mysql 如何在PostgreSQL中修改参数

xkftehaa  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(60)

我想知道如何做到这一点,因为在环顾四周之后,我发现所有的方法都是漫长而复杂的。在MySQL中,我们有:

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

字符串
当我们想使用存储过程或函数的时候,它真的很有用。我正在PostgreSQL中寻找等效的东西,如果有的话。
先谢谢你了!

kulphzqa

kulphzqa1#

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标准),包括分隔符,只有函数体会有所不同。
你也可以为不同的函数使用不同的分隔符,但是单个函数的开始和结束分隔符需要匹配。

rm5edbpk

rm5edbpk2#

在PostgreSQL中,我们只能使用分隔符$$和',并且没有办法更改分隔符,而MySQL可以使用更多的分隔符,只要没有冲突,并且可以使用DELIMITER $$DELIMITER //等更改分隔符。

相关问题