2017-03-11 24 views
1

MonetDBで実行するクエリ文字列を宣言しようとしています。これが可能であれば、ドキュメントは明確ではありませんが、他のエンジンではこの機能が許可されています(MySQLやMS SQL Severなど)。MonetDBでクエリ文字列を実行する方法

:以下

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は実際のクエリではなく、文字列を想定しているため、次のコードは、

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

を実行することはできません。

編集

私はSQLストアド関数でこれを実現したいと思います。私が持っているクライアントは、SQL関数を直接実行しなければならず、MonetDBサーバーに送信される前に、その場でSQLを構築するための中間Java/PHP/etcスクリプトはありません。したがって、私はそのような関数を作成する必要があります:

私の関数は他のテーブルや関数でも、これより複雑です。問題は関数が1つのスキーマに属し、データテーブルが別のスキーマに属していることです。これは 'コンパイル'時には分かりません。

答えて

1

残念ながら、MonetDBはこれをサポートしていません。

構築し、クエリの唯一の様々な部分が値であれば、あなたはPREPARE試みることができる:

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

しかし、それは一例FROM ?を書くためにすることはできません。そのような場合、唯一の方法は文字列連結クライアント側を行うことです。

+0

私はクライアント側でそのクエリ文字列を作成できます - それを実行するステートメントは何ですか? 'execute query_string'?これは、あるスキーマのデータを操作するSQL関数と、実行時に名前がわからない別のスキーマ(つまり、インストールとユーザー名によって異なります)の実際のデータを操作するための機能です。 – YoungMin

+0

私は恐らく、クエリ文字列を実行することはできません、クエリだけです。 –

関連する問題