- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:
我在 Postgres (9.1) 中使用 plpgsql 语言创建的函数有问题。我来自 SQL Server 世界,所以这里存在一点语言差异。
我的问题是 postgres 似乎没有正确分配我传递的参数。
这是我的函数定义:
CREATE OR REPLACE FUNCTION func1 (
IN param1 character varying,
IN param2 character varying DEFAULT NULL::character varying,
IN param3 int DEFAULT NULL::int)
RETURNS void
AS $$
BEGIN
INSERT INTO table1
(
col1
, col2
, col3
)
VALUES
(
$1
, $2
, $3
)
END;
$$ LANGUAGE plpgsql;
函数本身在数据库环境中测试时运行良好,但我目前正尝试通过 ODBC 连接从 C++ 调用它。
这里是我设置参数的地方:
pCmd->paramIn( "param1", (char *)name.getString().c_str() );
pCmd->paramIn( "param3", 100 );
在这种情况下,我没有为 param2 分配任何值。它可以为空 - 应该不是问题。
我得到的错误是:
ERROR: function func1(unknown, integer) does not exist;
据我所见,调用试图按顺序分配参数,忽略参数名称。
问题:
1 - 我怎样才能调用这个函数来让它工作?我是否必须将“NULL”作为缺少的参数传递进来,并确保它们都是有序的?
2 - 如果我使用的是 ODBC 连接(我肯定是这样),我是否应该调用一个 SQL 语言函数,而该函数又会调用一个 PLPGSQL 函数?这有点令人费解,但我愿意尝试一下。
3 -(不是问题)请不要建议“不要使用 ODBC”。另外,除非必要,否则请不要尝试更改函数的内部结构。我现在主要关心的是学习如何通过 ODBC 在 postgres 中进行函数调用。
提前感谢大家花时间阅读本文,非常感谢所有回答的人。
更新:
这是 DboCommand:
DboCommand *cmd;
cmd = new DboCommand(dbConnection, "{call func1 (?) (?)}");
以前是这个
cmd = new DboCommand(dbConnection, "func1");
现在,错误是:
the # of binded parameters < the # of parameter markers
最佳答案
问题 #1:是的,您必须传递 NULL 并关心顺序(和类型)。
理论上,PostgreSQL 函数可以用命名或位置表示法的参数调用。在这里解释:http://www.postgresql.org/docs/9.1/static/sql-syntax-calling-funcs.html
当仅使用位置符号时,只有在省略任何后续参数时才可以省略第 N 个参数。由于您的 ODBC 驱动程序明确使用此表示法,因此如果要指定第三个参数,则必须指定第二个参数。据推测,您在客户端代码中为参数选择的名称与 plpgsql 函数声明的名称完全无关,位置和参数类型对于匹配对现有函数的调用很重要。
问题 #2:引入 SQL stub 函数对此无济于事。
问题 #3:从调用者的角度命名参数的可能性是最近出现的(我认为出现在 PG 9.0 中),所以这可能是 ODBC 驱动程序不支持它的原因。
关于c++ - 使用可空参数调用 PL/PGSQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893346/
我正在使用源代码中的Postgres 13(Rel_13_STRATE分支),并且我使用的是来自apachea/age源代码的(Release/PG13/1.3.0分支)中的1.3.0版的Apache
我有 fusionpbx 和简单的 pgsql 工作......现在我已经用 bdr pgsql 创建了 HA fusionpbx 并且它工作正常但我不知道如何将数据从非 bdr pgsql 迁移到
我正在尝试安装 php7.0-pgsql,但总是得到 E: 无法定位软件包 phpXXX-pgsql 我在尝试 apt-get update apt-get install php7.0-pgsq
我有一个 Rails 应用程序,我正在尝试对其运行测试。在我能够成功运行 rake test:all 的前一天,一切都井井有条。今天,当我运行 rake test:all 时,我收到了这个错误: 我知
有时候我们项目中会遇到查询的字符串比较特殊:如自己本身待单引号 此时查询肯定报错。那么处理方式也很简单 只需要这样加一个单引号 这样就可以解决了 解决方式和MySQL方式不一样。 补充
1、网上一般说的方法如下: :=,赋值,比如user_id := 20; select into 赋值,比如 ?
我就废话不多说了,看代码吧~ ? 1
删除数据库的命令: ? 1
方法: pg10.0之前: select pg_switch_xlog(); pg10.0之后: select pg_switch_wal(); 备注:执行 pg_switch_xlog(
1. 获取表中普通信息:如字段名,字段类型等 ? 1
环境:VMware、CentOS-7-x86_64-DVD-2009.iso、nginx-1.26.1、php-7.2.0、postgresql-12 php最好安装对应php项目所需版本,否则会出
我正在尝试将字符串列数据排序为数字。我收到如下错误: ERROR: invalid input syntax for integer: "HEI001" SQL state: 22P02 我尝试过:
如果我将这两个 Postgres 函数定义保存在两个单独的 .sql 文件中: CREATE OR REPLACE FUNCTION column_exists(tablename text, col
我正在尝试在 Windows 10 64 位 (WAPP) 上使用 pgsql 扩展。 我有: 重新启动 Apache 取消注释 php.ini 中的所有 postgresql 扩展 使用LoadFi
我尝试使用 phpPgAdmin 在我的数据库中创建一个表。但是在生成代码后出现错误。 SQL 错误: ERROR: syntax error at or near "(" at character
我已经在 pgsql 中创建了一个存储过程。特定列中有一个 json 对象,我需要获取该 json 对象中数据的总和。在遇到空值之前,它可以完美运行。json 对象中的元素可以有空值。但是当我得到总和
我必须编写一个查询,以某种方式对我的用户名进行排序(排序),其中应优先使用特定字母(在名称中)进行排序。例如,如果我有用户 Lemon、Loger、Alan、Avon、Bland、Cavin、Clau
背景 我是 PostgreSQL 的新手,我在使用这个触发函数时遇到了一些问题,我在下面明显简化了这些问题。我可以要求帮助修复查询,但我认为我可以处理,而且我更关心的是我有很多这样的功能,我需要一种方
我正在尝试确定如何在 PgSQL 中将一年中的某一天转回日期。当我这样做时 select date '2013-01-01' + interval '53 days' 我得到一个时间戳: "2013-
这段代码没有错误,但没有任何数据变化,请帮助我。我想从一些库存表中多次更新数量 drop FUNCTION SP_PROSES_STOCK(noresep bigint, p_post_cd varc
我是一名优秀的程序员,十分优秀!