首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PostgreSQL:“反射光标”处或附近的语法错误

PostgreSQL:“反射光标”处或附近的语法错误
EN

Stack Overflow用户
提问于 2021-11-26 04:04:02
回答 1查看 537关注 0票数 1

使用Microsoft数据库时,有时会从存储过程返回多个结果集。我经常返回太多,以至于很难理解到底是哪一个。为了解决这个问题,我遵循了一个从同事那里学到的惯例:第一个结果集是"map",它定义了第二个结果集和其他结果集的名称。它只有一个记录,其中每个字段名都是结果集的名称,相应的字段值是返回的结果集数组中的索引。客户端代码首先通过查找索引来访问特定的结果集。

下面的简单示例说明了这个想法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or alter procedure divide
  @a int,
  @b int
as
begin
  declare
    @error int = 0

  -- Name-to-index map
  select
    1 as result,
    2 as error

  -- Result
  if @b = 0
  begin
    set @error = 1
    select
      null as result
  end
  else
  begin
    select
      @a / @b as result
  end

  -- Error
  select
    @error as error
end

在本例中,第一个结果集(index: 0)给出了另外两个结果集:一个称为“结果”(index: 1),另一个称为“错误”(index: 2)。两者都只包含一条记录:除法的结果和错误代码。

示例调用1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exec divide @a = 91, @b = 13

JSON格式的结果集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  [{ result: 1, error: 2 }],
  [{ result: 7 }],
  [{ error: 0 }]
]

示例调用2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exec divide @a = 91, @b = 0

JSON格式的结果集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  [{ result: 1, error: 2 }],
  [{ result: null }],
  [{ error: 1 }]
]

我试图使用正式文档,特别是,特别是此页,将此技术移植到PostgreSQL 14。我想出了这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace function divide(
  a integer,
  b integer
)
returns setof refcursor
language sql as
$$
  declare
    ref1 refcursor;
    ref2 refcursor;
    ref3 refcursor;
    error int := 0;

  begin
    -- Name-to-index map
    open ref1 for select
      1 as result,
      2 as error;
    return next ref1;

    -- Result
    if b = 0 then
      error := 1;
      open ref2 for select
        null as result;
    else
      open ref2 for select
        a / b as result;
    end if;
    return next ref2;

    -- Error
    open ref3 for select
      error;
    return next ref3;
  end;
$$;

不幸的是,我得到了一个错误:syntax error at or near "refcursor",指的是declare后面第一行中的refcursor

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-26 04:50:57

你使用了错误的语言声明。您的过程在plpgsql中,但通过顶部的language sql语句将其声明为普通sql

顶替

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace function divide(
  a integer,
  b integer
)
returns setof refcursor
language sql as

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create or replace function divide(
  a integer,
  b integer
)
returns setof refcursor
language plpgsql as

解决了问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70124117

复制
相关文章
EditText把光标放在文本的末尾处
当手动设置EditText的文本时,光标会恢复到最前面,可以再监听中设置光标到末尾处,这样就好了,大家有什么问题可以在下方留言。
程思扬
2022/01/11
5790
textarea 在光标处插入文字
效果演示 欢迎访问cssfirefly.cnblogs.com html: <textarea id="text" style="width:500px;height:80px;">欢迎访问http://cssfirefly.cnblogs.com/</textarea> <input type="button" value="插入文字" onclick="insertText(document.getElementById('text'),' NewWord ')"> <input type="but
deepcc
2018/05/16
1.2K0
C# 在 webBrowser 光标处插入 html代码 .
private void BtnInsertMedia_Click(object sender, EventArgs e)         {             InWord frm = new InWord("请填入视频地址(后缀必须是.swf):");             frm.ShowDialog();             if (frm.Value != null && frm.Value != "")             {                 IHTMLDocum
跟着阿笨一起玩NET
2018/09/18
1.4K0
【先行者】把光标停在input的右侧结尾处?
今天咱们先行者计划的微信群里有个同学提了这个问题, 我当时也没怎么细想,就给了个思路, 后来这个同学说, <!-- --> setSelectionRange?这是个啥?我还真没怎么用过它,查了一
web前端教室
2018/02/07
9480
【先行者】把光标停在input的右侧结尾处?
AirDoS攻击能远程让附近的iPhone或iPad设备无法使用
如果你一走进某个房间就能让里面的所有iPhone或iPad设备无法使用,会怎么样?是不是听起来非常邪恶?有什么好的方法让那些老是低头刷苹果手机的人停下来?
FB客服
2019/12/31
1.4K0
AirDoS攻击能远程让附近的iPhone或iPad设备无法使用
Postgresql插入或更新操作upsert
幂等性的一个要求是多次操作的结果一致。对于update操作,多次直接的结果都是最后update的值,是满足需求的。但对于insert,如果已经插入,第二次会报错,duplicate error, 主键重复或者unique key duplicate。所以需要做一下处理。
Ryan-Miao
2019/01/24
2K0
如何在 Vim 中将光标移动到行首或行尾?
将光标从行首或行尾移动并不是一项关键操作,但您可能会经常做一些事情,以至于反复捣碎h或l键会让人感到恼火,或者更糟的是,效率低下。
网络技术联盟站
2022/06/09
13.7K0
如何在 Vim 中将光标移动到行首或行尾?
光标定位,隐藏光标
最近写贪吃蛇游戏时,需要用到光标定位,故总结如下。 方法一: 1 #include<windows.h> 2 #include<stdio.h> 3 4 HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE); 5 COORD coord; 6 void locate(int x,int y) 7 { 8 coord.X=x; 9 coord.Y=y; 10 SetConsoleCursorPosition(hout,coord);
猿人谷
2018/01/17
2.5K0
【全文搜索】全文搜索 PostgreSQL 或 ElasticSearch
在本文中,我记录了在 PostgreSQL(使用 Django ORM)和 ElasticSearch 中实现全文搜索 (FTS) 时的一些发现。 作为一名 Django 开发人员,我开始寻找可用的选项来在大约一百万行的标准大小上执行全文搜索。有两个值得尝试的选项:PostgreSQL 和 ElasticSearch。 在深入研究我的发现之前,让我们澄清一下全文搜索 (FTS)(或“搜索”)与数据库过滤器或查询之间的区别。“搜索”涉及从零开始,然后向其中添加结果。数据库过滤从一个集合开始,然后根据条件从中删
架构师研究会
2022/04/27
2.3K0
【全文搜索】全文搜索 PostgreSQL 或 ElasticSearch
【问题解决】MyBatis分页查询SQL Server2008时出现'@P0' 附近有语法错误
MyBatis分页查询SQL Server2008时出现’@P0’ 附近有语法错误” Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: ‘@P0’ 附近有语法错误。
谙忆
2021/01/21
1.8K0
ExecuteReader报错,语法错误
最后,到处查找解决方案,终于在论坛见到了大神的一句:“你输入的是中文字符的空格!”
全栈程序员站长
2022/08/28
8790
ExecuteReader报错,语法错误
SpringBoot使用反射对业务代码进行统一处理
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
青衫染红尘
2021/01/19
9560
在.NET中实现彩色光标,动画光标和自定义光标
using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection;
Java架构师必看
2021/03/22
1.8K0
改变UITextField的光标颜色
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/52984966
用户1451823
2018/09/13
3.6K0
.NET/C# 使用反射调用含 ref 或 out 参数的方法
2018-09-02 06:59
walterlv
2018/09/18
2.2K0
[javaSE] 反射-方法的反射
1.如何获取某个方法 方法的名称和方法的参数列表才能唯一决定一个方法 2.方法反射的操作 method.invoke(); package com.tsh.reflect; import java.lang.reflect.Method; public class ReflectDemo { public static void main(String[] args) { P p=new P(); Class c=P.class; try {
唯一Chat
2019/09/11
6060
java中复制对象通过反射或序列化
在使用缓存读取数据后修改发现缓存被修改。于是找了下复制对象的方法。 关于对象克隆 ---- 按我的理解,对象是包含引用+数据。通常变量复制都是将引用传递过去。比如: 1 Person p1 = new Person(); 2 Person p2 = p1; 这两句话,创建两个引用p1,p2,但指向共同的内存大堆数据。修改任何一个,另一个的数据也将修改。 直接引用传递测试用例: 1.实体类: 1 package com.test.java; 2 3 import java.io.Serializ
Ryan-Miao
2018/03/13
1.4K0
java中复制对象通过反射或序列化
练了一年再来总结的 Vim 使用技巧
作者:P_Chou 来源:见文末 转眼上vim的“贼船”有一年多了。从PHP到C,都在用。想要真正用vim于日常的编码工作,必然需要一些插件的支持。不过本文并不打算总结插件,笔者认为 vim 的两个精髓:组合和重复跟插件也没有什么关系。 命令模式应该是常态 在大多数编辑器中,相信大家都喜欢敲几个单词就 “保存(ctrl+s)” 一下。而在 vim 中,保存是:w,而且需要在命令模式下进行。因此,往往要按Esc:w多达三个键才能保存。很多初学者十分诟病这个设计。事实上,经常使用Esc切换到命令模式才是
小小科
2018/06/20
8300
在可编辑div中定位光标和设置光标
当我们去点击一个输入框的时候,就会产生一个选中对象 selection,就是我们可以看到的文字变成蓝色的那个区域,selection在火狐浏览器可以直接用 window.getSelection()获取,在HTML里面,selection只有一个的,并且selection是一个区域,你可以想象成一个长方形,它是有开始和结束的。
越陌度阡
2020/11/26
9.5K0
点击加载更多

相似问题

"IF“PostgreSQL处或附近的语法错误

10

PostgreSQL:";“处或附近的语法错误

10

Postgresql:"-“处或附近的语法错误

30

Postgresql语法错误在"+“处或附近

25

Postgresql语法错误在"(“)处或附近

29
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文