使用 soci 和 PL/pgSQL 的变量绑定



我正在使用SOCI库在Oracle和PostgreSQL数据库上执行数据库查询。我得到了以下error

无法执行查询。致命错误。错误:绑定消息提供 1 个参数,但预准备语句 " 需要 0">

当我绑定一个变量并按照 PL/pgSQL 执行时。但是甲骨文变体工作正常。

try
{
// This doesn't work
std::string sql_pg = " 
do $$n 
declaren 
n bigint := 1;n 
beginn 
while n <= :1n 
loopn 
insert into ip_table (ip, user) values('0.0.0.1', 'user1');n 
n := n + 1;n 
end loop;n 
end;n 
$$;";
// This works
std::string sql_ora = " 
declaren 
n number := 1;n 
sql_statement VARCHAR2(500);n 
beginn 
while n <= :1n 
loopn 
sql_statement := q'[insert into ip_table (ip, user) values('0.0.0.1', 'user1')]';n 
execute immediate sql_statement;n 
n := n + 1;n 
end loop;n 
commit;n 
end;";
int count=4;
if (session.get_backend_name() == "postgresql")
session << sql_pg.c_str(), soci::use(count); // error
else
session << sql_ora.c_str(), soci::use(count); // works
std::cout << "executed successfully" << std::endl;
}
catch(const std::exception& err)
{
std::cout << err.what() << std::endl;
}

我尝试了按位置和名称绑定变量。PL/pgSQL脚本没有任何效果。如果我用值替换变量,脚本就可以工作。有什么想法吗?

这个例子可能不是这个问题的完美选择。但是考虑一下我是否将if条件与变量一起使用

你不能在Postgres中这样做。DO命令不允许外部参数。您只能在客户端应用参数(注意 SQL 注入(。

相关内容

  • 没有找到相关文章

最新更新