我正在使用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 注入(。