質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

1回答

335閲覧

【MariaDB】ストアド内で別のストアドを実行し結果をテーブルにINSERTする方法について

tomo_mon

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2022/07/19 07:46

編集2022/07/19 08:18

実現したいこと

ストアド内で別のストアドを実行し、その結果をテーブルにINSERTしたいです。

試したこと

例えば下記のようにストアド「spTEST_Get()」を実行し
その結果が
ーーーーーーーーーーーー
'坂本龍馬',1,'土佐'
'西郷隆盛',2,'薩摩'
ーーーーーーーーーーーー
だった場合、

CREATE PROCEDURE spTest_Add ()
BEGIN

 INSERT INTO Temp(a,b,c)
CALL spTEST_Get();

END
のようなspTEST_Get()を実行した結果をテーブル「Temp」にINSERTするspTest_Add()を作成したいです。

※イメージとしては
SQLServerの
INSERT INTO Temp(a,b,c)
EXEC spTEST_Get
のような実行方法です。

もし解決方法をご存じの方がいらっしゃいましたらご教授頂けますと幸いです。
その他に必要な情報等がありましたら提示致します。
宜しくお願い致します。

実行環境

OS:AWS Linux2
DB:MariaDB 10.2.12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/07/19 07:50 編集

ストアドプロシージャspTESTの結果の返し方と、それを変数で受けることと、受けた変数で別のストアドプロシージャを呼び出すことの組み合わせだと思うのだけど、ドキュメントで文法の確認などしていますか? あと、mariadbのバージョンや実行環境についても詳しく。
tomo_mon

2022/07/19 08:05

早速返信頂きありがとうございます! 実行環境を追記しました。 また内容が分かりづらかったので「試したこと」の内容を追記・修正しました。 やりたい事としては spTest_Add内でspTEST_Getを実行した結果をテーブルにINSERTしたいのですが、 ぐぐってみても、やり方が無くここで質問した次第です。 宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2022/07/19 08:32

spTEST_Get()の中で、結果をどのように扱っているのか。単純なユーザー変数に格納できない(クエリ結果という)レコードを引き渡すには一時テーブルを定義してそこに記録するか、あるいは文字列などに加工(シリアライズ)することになると思うけど。と考えれば、クエリー実行するだけストアドと記録するストアドを分けてデータを引き渡すのって不毛に思えてくるんですが。
tomo_mon

2022/07/19 08:44

返信ありがとうございます! 本件のspTEST_Get()とspTest_Add()は質問用に単純化しています。 実際はspTEST_Get()はもう少し複雑で長いクエリで別の機能で使用しており、このクエリをspTest_Add()内で参照して別の処理をしたかったので、SP内でspTEST_Get()が実行した結果が使えないかなぁと思った次第です。 やはり、SQLServerのような方法は無いみたいですね。。。
guest

回答1

0

試してみましたがmysqlの仕様上プロシージャの出力結果をサブクエリ的に使う方法はなさそうですね。
冗長に元のプロシージャと同様のルーチンを新しいプロシージャに組み込んでください

投稿2022/07/22 12:50

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問