補遺:Stata 14の時点で、揮発性テーブルはハッキングなしで機能します。
一時的な揮発性テーブルを操作するためにStataを微調整する方法はありますか?これらのテーブルとデータは、ユーザーがセッションからログオフした後に削除されます。
これは、StataとTeradataで使用している簡単なおもちゃのSQLクエリの例です。
odbc load, exec("
BEGIN TRANSACTION;
CREATE VOLATILE MULTISET TABLE vol_tab AS (
SELECT TOP 10 user_id
FROM dw_users
) WITH DATA
PRIMARY INDEX(user_id)
ON COMMIT PRESERVE ROWS;
SELECT * FROM vol_tab;
END TRANSACTION;
") dsn("mozart");
これは私が受け取っているエラーメッセージです:
The ODBC driver reported the following diagnostics
[Teradata][ODBC Teradata Driver][Teradata Database] Only an ET or null statement is legal after a DDL Statement.
SQLSTATE=25000
r(682);
Stataエラーコードの意味は次のとおりです。
エラー 。。。。。。。。。。。。。。。。。。。。。。。。戻りコード682はodbcdsnに接続できませんでした。これは通常、不正なユーザー名やパスワードなどの不正な権限が原因で発生します。set debug onを使用して、ODBCドライバーによって生成された実際のエラーメッセージを表示します。
「SELECTTOP10...」クエリを実行するだけでデータをプルできるので、許可があれば問題ありません。デバッグをオンに設定しましたが、追加情報が生成されませんでした。
セッションモードはTeradataです。ODBCマネージャーはunixODBCに設定されています。UbuntuサーバーでStata13.1を使用しています。
根本的な問題は、SQLステートメントごとに個別の接続が確立されているため、selectが発行されるまでに揮発性テーブルが蒸発することであると考えられます。これを確認するためのテクニカルサポートを待っています。
コマンドをうまく使用してみodbc sqlfile
ましたが、最後に永続テーブルを作成しない限り、このアプローチは機能しません。にはロードオプションはありませんodbc sqlfile
。
揮発性テーブルはSASとRで問題なく機能するようです。たとえば、これは完全に機能します。
library("RODBC")
db <- odbcConnect("mozart")
sqlQuery(db,"CREATE VOLATILE MULTISET TABLE vol_tab AS (
SELECT TOP 10 user_id
FROM dw_users
) WITH DATA
PRIMARY INDEX(user_id)
ON COMMIT PRESERVE ROWS;
")
data<- sqlQuery(db,"select * from vol_tab;",rows_at_time=1)
おそらくこれは、DBへの接続が。まで開いたままであるためclose(db)
です。