2016-04-25 4 views
0

TeradataからRで処理するデータを抽出する必要があります。私は約84のDep/secキーを使用しています。 Teradataのストアドプロシージャは、Dep、Sec、およびDatesをパラメータとして受け入れます。私はその後、データセットを作成するたびにSPを呼び出すRのリストをループすることができました。Rのスクリプトから呼び出される動的パラメータを持つTeradataストアドプロシージャ

私はこのアイデアをテストするために作成したSPは非常に単純なものですが、動作させることはできません。

CREATE PROCEDURE procTest4 (IntN integer) 
BEGIN 
CALL DBC.SysExecSQL('SELECT top' || IntN || '* 
from TableName'); 
END; 

TeradataはSPを作成しますが、それを実行してパラメータを渡す方法はわかりません。試してみると: procText4(10) を呼び出す

5568:ストアドプロシージャ内でSQL文がサポートされていません。

唯一の他の選択肢は、RにSQL文字列を作成してそこから実行することですが、揮発性テーブルを作成するSQLのパスは複数あり、RODBCパッケージはそれらを好きではないようです。それを行うの非常に面倒な方法。

ご迷惑をおかけして申し訳ありません。

+0

あなたはすることができます」 sysexecsqlでSELECTを実行しないでください。あなたはOPEN/FETCHする必要があります。とにかく、それにSPが必要なのはなぜですか? –

+0

私は他の方法でトップに私のパラメータを渡すと思うことができませんでしたか?私はクエリを動的にする必要があります。もしあなたが何か示唆を持っていれば、私はそれらを試してみるよりも嬉しいです。 Cheers – MidnightDataGeek

+0

'Select'の代わりに' Insert'を使うことができます。最初にあなたのデータを一時テーブルに挿入して、後でそれを照会すると、ここで何を達成しようとしているのか分かりませんでした。 –

答えて

3

少し複雑で動的SQLを使用してストアドプロシージャから結果セットを返すための構文:

CREATE PROCEDURE procTest4 (IntN INTEGER) 
DYNAMIC RESULT SETS 1 
BEGIN 
    DECLARE SqlStr VARCHAR(1000); 
    DECLARE rslt CURSOR WITH RETURN ONLY FOR stmt; 
    SET SQLStr = 'SELECT top ' || IntN || ' * from TableName'; 
    PREPARE stmt FROM SqlStr; 
    OPEN rslt; 
END; 

しかし、あなたはあなたがそれらのループを書き換えることができるかどうかダブルチェックすべきは...

+0

恐ろしくありがとう!私は一日中、解決策をオンラインで見て、オフィスを尋ねたが、誰もSPを使用していないようだ。 私の実際のSQLクエリーは約200行で、SQLのパスは4回ですが、私は単純に上記のクエリーを実際のクエリーに置き換えることができると思っていますか? これはどこに文書化されていますか?私はRで使用するデータを抽出するのに多くの時間を費やすので、これをよりよく理解したいと思います。 – MidnightDataGeek

+0

@MidnightDataGeek:* SQLストアドプロシージャとEmbedded SQL *を見てみましょう。例はhttp://www.info.teradata.com/HTMLPubs/DB_TTU_14_00/SQL_Reference/B035_1148_111A/ch03.138.086.htmlですが、常に2倍sysntaxがEmbedded SQLでないかどうかを確認する – dnoeth

関連する問題