私はいくつかのselectステートメント(異なるテーブルから)を持ち、これらのselectステートメントの出力が一時テーブルにロードされるプロシージャを持っています。この一時テーブルにロードされているすべてのレコードが出力として表示されます。今私は、私のプロシージャがこの一時テーブルを持ってはならないという要件を持っています。一時テーブルを使用せずに読み書きする方法
私はそれを達成するための選択肢を教えていただけますか?
私はいくつかのselectステートメント(異なるテーブルから)を持ち、これらのselectステートメントの出力が一時テーブルにロードされるプロシージャを持っています。この一時テーブルにロードされているすべてのレコードが出力として表示されます。今私は、私のプロシージャがこの一時テーブルを持ってはならないという要件を持っています。一時テーブルを使用せずに読み書きする方法
私はそれを達成するための選択肢を教えていただけますか?
と仮定すると、mysqlの... あなたは、SELECTクエリが列とデータ型の同じ数を持っていると仮定すると
UPDATE [table1] AS t1
INNER JOIN [table2] AS t2
ON t1.[col1] = t2.[col1]
SET t1.[col2] = t2.[col2];
ような何かを行うことができます。あなたの最善のアプローチは、出力を表示するために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;
結果をまとめるのに 'UNION(ALL) 'を使うことができますか?これはMySQL、Oracle、またはSQL Serverですか?最良のアプローチは、DBMSに非常に依存する可能性があります。使用しているコードを投稿することをお勧めします。そうしないと、あなたが得た答えは間違いなく推測になります。 – GarethD
あなたはspを共有できますか?また、出力のサンプルを含めることもできます。なぜテンポラリテーブルがオプションではないのか説明できれば、同様の制限に遭遇する回答を避けることができます。 –
これはOracleにあります。残念ながら、ここにコードを貼り付けることはできません。私が使っている一時テーブルには競合の問題があります。だから、私の必要条件は、私はテンポラリテーブルを使うべきではなく、(複数のselect文から出てきた)レコードを格納し、それを渡すための他の方法(プロシージャ内で) – Siddharth