2017-11-13 16 views
1

私が理解している限り、OUT(およびIN/INOUT)のパラメータタイプでMySQL does not supportの機能を理解しています。 私はOUTパラメータを使用してMySQL関数をエミュレートする方法

DROP FUNCTION IF EXISTS `GETGOSTAUTHRUS`; 

CREATE DEFINER = `root`@`localhost` FUNCTION `GETGOSTAUTHRUS`(`PublID` int) 
RETURNS varchar(1024) CHARSET utf8 
BEGIN 

    RETURN .....; 
END; 

この関数はSELECTのステートメントから呼び出される関数を作成しています:

SELECT 
GETGOSTAUTHRUS(p.ID) `AuthList`,....... 
FROM.... 

すべてが正常に動作します。しかし、私は機能を拡張するとvarchar型の別の値を返す必要がありますが、私は手続きの宣言にそうであるように、私は同じようにout prefix varchar(50)変数を宣言することはできません。

CREATE procedure `GETGOSTAUTHRUS`(PublID int, OUT prefix varchar(50)) 

BEGIN 

私が発明した唯一の方法アウトは別のものを宣言することですそれを別々に呼び出すことはできますが、2番目の関数がテーブルから同じデータをフェッチして処理するため最適ではないようです。

問題をどうすれば管理できますか?

+0

http://www.mysqltutorial.org/stored-procedures-parameters.aspx –

+0

@ColourDalnetはい、ありがとうございます。それは私のQのリンクから入手可能な記事とほぼ同じです –

答えて

1

関数は1つの値しか返さないと仮定しますが、ここでは間違った方法があります。あなたが何をしようとしているのかわからないので、ここでXY problemを扱っているかどうかはわかりません。あなたの全体的な問題に対するよりよい解決策があるかもしれません。

ただし、これはuser-defined variablesで解決できます。これらはセッションにバインドされているので、必ず関数内でリセットしてください。

+0

ありがとう!これはXY問題ではありませんが、質問の第2部分は役に立ちます!私は '@ somevariable'で値を転送することを考えます –

関連する問題