如何在MonetDB中执行查询字符串 [英] How to execute a query string in MonetDB

查看:4
本文介绍了如何在MonetDB中执行查询字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试声明一个要在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函数,并且在将其发送到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

遗憾的是,推荐答案不支持此功能。

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

sql>PREPARE SELECT * FROM foo WHERE id = ?;
execute prepared statement using: EXEC 13(...)
sql>EXEC 13(22);
但是例如不可能写FROM ?。对于这种情况,唯一的替代方法是进行字符串连接客户端。

这篇关于如何在MonetDB中执行查询字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆