postgresql - 如何在 postgres 中使用 DO
问题描述
我试图更好地理解DO
postgreSQL 9.1 中的命令
我有以下代码块,
DO
$do$
BEGIN
IF 1=1 THEN
SELECT 'foo';
ELSE
SELECT 'bar';
END IF;
END
$do$
但是它返回以下错误:
[42601] 错误:查询没有结果数据的目的地 提示:如果要丢弃 SELECT 的结果,请改用 PERFORM。其中:SQL 语句中的 PL/pgSQL 函数“inline_code_block”第 4 行
解决方案
PostgreSQLDO
命令创建并执行一些特定的短寿命函数。此函数没有任何接口,因此除了更改表中的数据和一些调试输出之外,它无法返回任何输出。
您的示例有多个问题:
只有 PostgreSQL 表函数可以返回一些表格数据。但该机制与 MSSQL 有很大不同。PostgreSQL 用户应该使用
RETURN NEXT
或RETURN QUERY
命令。CREATE OR REPLACE FUNCTION foo(a int) RETURNS TABLE(b int, c int) AS $$ BEGIN RETURN QUERY SELECT i, i + 1 FROM generate_series(1,a) g(i); END; $$ LANGUAGE plpgsql; SELECT * FROM foo(10);
DO
匿名函数不是表函数 - 因此不允许输出。PostgreSQL 9.1 不支持版本,请升级
如果你只有 MSSQL 的一些经验,那就忘了它。PostgreSQL 的存储过程概念与 Oracle 或 DB2 非常相似,与 MSSQL 有很大不同。T-SQL 将过程和 SQL 构造集成到一组中。Oracle, PostgreSQL, ... 过程功能可以嵌入 SQL,但过程功能没有集成到 SQL。
请阅读 PostgreSQL PLpgSQL文档以更好地了解这项技术。
推荐阅读
- powershell - 隐藏 Add-RdServer 的进度条
- css - 如何在 reactjs 中从道具中添加图像背景
- python - 验证 sqlalchemy 中的列表修改
- android - 无法识别 USB 设备(例如物理键盘)到智能手机 Sony Xperia Z3+ e6553 的热插拔
- javascript - 使用 javaScript 调用一些函数的 html 表单
- python - 在 PyCharm、windows 上安装 Kivy 时出现问题
- windows - 防止无意的批处理文件运行
- php - 仅当用户状态为活动时,如何在 Laravel 8 Jetstream 中对用户进行身份验证?
- verilog - 如何解决verilog的非法引用错误
- prolog - Prolog中的布尔统一?