2016-04-12 14 views
-1

私はいくつかのselectステートメント(異なるテーブルから)を持ち、これらのselectステートメントの出力が一時テーブルにロードされるプロシージャを持っています。この一時テーブルにロードされているすべてのレコードが出力として表示されます。今私は、私のプロシージャがこの一時テーブルを持ってはならないという要件を持っています。一時テーブルを使用せずに読み書きする方法

私はそれを達成するための選択肢を教えていただけますか?

+2

結果をまとめるのに 'UNION(ALL) 'を使うことができますか?これはMySQL、Oracle、またはSQL Serverですか?最良のアプローチは、DBMSに非常に依存する可能性があります。使用しているコードを投稿することをお勧めします。そうしないと、あなたが得た答えは間違いなく推測になります。 – GarethD

+0

あなたはspを共有できますか?また、出力のサンプルを含めることもできます。なぜテンポラリテーブルがオプションではないのか説明できれば、同様の制限に遭遇する回答を避けることができます。 –

+0

これはOracleにあります。残念ながら、ここにコードを貼り付けることはできません。私が使っている一時テーブルには競合の問題があります。だから、私の必要条件は、私はテンポラリテーブルを使うべきではなく、(複数のselect文から出てきた)レコードを格納し、それを渡すための他の方法(プロシージャ内で) – Siddharth

答えて

0

と仮定すると、mysqlの... あなたは、SELECTクエリが列とデータ型の同じ数を持っていると仮定すると

UPDATE [table1] AS t1 
INNER JOIN [table2] AS t2 
ON t1.[col1] = t2.[col1] 
SET t1.[col2] = t2.[col2]; 
1

ような何かを行うことができます。あなたの最善のアプローチは、出力を表示するためにallとrefcursorを使用することです。スニペットの下の希望が役立ちます。

--You can try using nested table types here instead of using temp tables or simply UNIONALL 
--Hope below example helps. 

DECLARE 
    p_lst sys_refcursor; 
BEGIN 
    --Assuming that all the SELECT statements have same number of columns as well as datatype 
    OPEN p_lst FOR 
    (SELECT 'AV',1 FROM DUAL 
    UNION ALL 
    SELECT'SH',2 FROM DUAL 
    UNION ALL 
    SELECT 'TK',3 FROM DUAL 
); 
END; 
関連する問題