gpt4 book ai didi

exec - 如何在 MonetDB 中执行查询字符串

转载 作者:行者123 更新时间:2023-12-01 12:22:34 25 4
gpt4 key购买 nike

我正在尝试声明一个查询字符串以在 MonetDB 中执行。文档并不清楚这是否可行,但其他引擎允许此功能(例如 MySQL 和 MS SQL Sever)。尝试以下操作

execute 'select * from tables';

消息失败

Error: syntax error, unexpected STRING, expecting IDENT or sqlINT

这背后的原因是我需要声明一个变量模式名称,这样我就可以按以下方式执行查询:

declare s varchar(32);
set s = 'the_schema';
execute 'select * from ' || the_schema || '.the_table';

请让我知道这在 MonetDB 中是否可行,或者您是否对此有一些提示。我尝试使用准备好的语句,如 MonetDB 文档中给出的那样——但以下代码无法执行

prepare 'select * from ' || the_schema || '.the_table';

因为 prepare 需要一个实际的查询,而不是一个字符串。

编辑

我想仅使用 SQL 存储函数来实现此目的。我拥有的客户端必须直接执行 SQL 函数,并且在将 SQL 发送到 MonetDB 服务器之前,没有中间 Java/PHP/etc 脚本来动态构建 SQL。因此,我应该创建一个像这样的函数:

create function getData( dataSchema varchar(32) )
returns bigint
begin
declare query varchar(128);
set query = 'select count(*) from ' || dataSchema || '.the_table';
return( execute query );
end;

我的函数比这个复杂,还有其他的表,甚至还有函数。问题是函数属于一个模式,而数据表属于另一个模式,这在“编译”时是未知的。

最佳答案

不幸的是,MonetDB 不支持这个。

如果构造查询的唯一变化部分是值,您可以尝试 PREPARE:

sql>PREPARE SELECT * FROM foo WHERE id = ?;
execute prepared statement using: EXEC 13(...)
sql>EXEC 13(22);

但是例如写 FROM ? 是不可能的。对于那种事情,唯一的选择是在客户端进行字符串连接。

关于exec - 如何在 MonetDB 中执行查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com