• 締切済み
  • 困ってます

ストアドファンクションで

ストアドファンクションで、複数の値を返すことはできないのでしょうか? 例えば、Oracleなら構造体のユーザ型の値を返したりできます。 versionは、5.1.28です。 よろしくお願いします。

noname#75656

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数275
  • ありがとう数1

みんなの回答

  • 回答No.1

できません。 MySQLのストアドルーチンは、標準SQL準拠なので、実装が早かったため独自機能としているOracleやSQL Serverとは、かなり違いがあります。 ユーザデータ型は、標準SQLにも入っているので、今後、実装されると思います。 表の全列を返すというのは、同じく標準SQL準拠のDB2では実装済だと記憶しているので、今後、実装されるかも知れません。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • ストアドファンクションを差し替えたい

    VIEW は、CREATE OR REPLACE VIEW のようにして差し替えることができますが、 ストアドファンクションは、このような差し替えには対応していないのでしょうか? 本番稼動しているデータベースのストアドファンクションを差し替えたい場合は、 BEGIN DROP FUNCTION CREATE FUNCTION COMMIT とすればよろしいでしょうか?

  • ストアドファンクション中でconnectbyを使えない

    いつもお世話になっています。 PL/pgSQLでストアドファンクションをコーディング中なのですが、 その中でconnectbyを使って階層問い合わせをしようとしています。 すると、コンパイル中にconnectbyを使っている付近でエラーになって しまいます。connectbyもストアドファンクションだと思うのですが、 ファンクション中に別のファンクションを呼び出すことはできないのでしょうか?

  • Mysql ストアドファンクション 意図しない結果

    以下の通りストアドファンクションを作成しました。 関数名:fgetLineNew インパラメータ:shop Varchar 8 ※1つだけ。。。 戻り値: Int 11 <ソース> BEGIN DECLARE pline INTEGER(11) DEFAULT NULL; SELECT COUNT(1) INTO pline FROM `hoge` WHERE `SHOP` = shop; IF pline IS NULL THEN SET pline = 10000; END IF; RETURN pline; END 上記のように、作成したストアドファンクションですが、 どんな引数を入れても、戻り値が全ての行(817行)になってしまいます。 以下を参照。 Where区がまったく働いていないのですが、何が原因なのでしょうか。 教えてください。 <ストアドファンクション実行> mysql> select fgetLineNew(1); +----------------+ | fgetLineNew(1) | +----------------+ | 817 | +----------------+ 1 row in set (0.01 sec) mysql> select fgetLineNew(525); +------------------+ | fgetLineNew(525) | +------------------+ | 817 | +------------------+ 1 row in set (0.01 sec) mysql> select fgetLineNew(101); +------------------+ | fgetLineNew(101) | +------------------+ | 817 | +------------------+ 1 row in set (0.00 sec) mysql> select fgetLineNew(525); +------------------+ | fgetLineNew(525) | +------------------+ | 817 | +------------------+ 1 row in set (0.00 sec) mysql> select fgetLineNew('525'); +--------------------+ | fgetLineNew('525') | +--------------------+ | 817 | +--------------------+ 1 row in set (0.01 sec)

    • ベストアンサー
    • MySQL
  • ストアドファンクションについて

    最近SQL sarvarの勉強を始めた初心者です。 今、参考書を読みながらストアドファンクションを勉強してるんですが、 create function dbo.Fn_aaaaa (@dat datetime) returns char(14) as begin return cast(datepart(yyyy, @dat) as char(4)) + '年' + cast(datepart(mm, @dat) as char(2)) + '月' + cast(datepart(mm, @dat) as char(2)) + '日' + end という例題にある「returns char(14)」とはどういう意味なのかがよくわかりません。正直、戻り値という概念をしっかりと理解していない部分があり困っています。 本当に初歩的でもしかしたらSQLに関係のない質問かもしれませんがよろしければお教えください。

  • ストアドファンクションの再帰呼び出しについて

    「ストアドファンクションの再帰呼び出し」はできないのでしょうか。 hoge関数をhoge関数の中で呼び出しています。 hoge関数では、条件に当てはまらないと第三引数を、 編集して再帰呼出しをしています。 再帰呼出しする条件を引数に設定して実行すると、以下の実行結果(ERROR)が表示されます。 <実行結果> mysql> select hoge('7','1234','1234567891012'); ERROR 1424 (HY000): Recursive stored functions and triggers are not allowed. よろしくお願いします。

    • ベストアンサー
    • MySQL
  • postgres ストアドファンクションないのレコードの取得について

    質問させていただきます pg/plsqlのストアドファンクション内で 受け取った引数を sql := select * from hoge; FOR rec IN EXECUTE sql LOOP return rec.col;     <<<この部分で END LOOP; return; rec.引数名のようにして 引数から取得した 列を指定したいのですが、そのまま入れると そのような列はありませんと言うような返事を 返されてしまいます。 うまくやる方法はないものでしょうか? よろしくお願いします。

  • ストアドファンクションを動作させるためのmy.cnfの設定

    お世話になります。 ある書籍に、ストアドプロシージャやストアドファンクションを作成するには、5.0.16以降ではmy.cnfにlog-bin-trust-routine-creatorsやlog-bin-trust-function-creatorsの記述が必要、と書いてあったのですが、私の環境では、特にこの記述がなく動作しています。 このあたりのことで、何か情報がありましたら、ヒントだけでもけっこうですので、どなたか、お教えいただけないでしょうか。 どうか、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • postgresのストアドファンクションでエラーの

    postgresのストアドファンクションでエラーの拾い方を教えてください。 insertして重複したらアップデートに切り替えるというサンプルをよく見かけます。 DECLARE BEGIN insert文 RETURN TRUE; EXCEPTION WHEN unique_violation THEN update文 END; それと同じノリで、何かしらのエラーがあった時に、 『RETURN FALSE;』するか、もしくはエラーコードをそのまま拾って返すというようなサンプルが欲しいです。 DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN FALSE; END; DECLARE BEGIN 何かしらのSQL RETURN TRUE; EXCEPTION WHEN すべてのエラー THEN RETURN エラーコード; END;

  • ストアドファンクションがうまく作成できない

    SQL Server 2005 にて、 以下のようなストアドファンクションを作成しようとしても、 「メッセージ 156、レベル 15、状態 1、プロシージャ TestKansu、行 30 キーワード 'end' 付近に不適切な構文があります。」 といったエラーメッセージが表示されてしまい、 うまく作成できません。。 文法など、いろいろ調べてみたところ、特に問題なさそうな 感じではあるのですが。。 どこに問題があるのか、どなたかご教授願えないでしょうか? なにとぞ、よろしくお願いいたします。 -------------------------------- use tempdb go -- 呼び出し形式 create function TestKansu ( @Date as datetime, @Type as varchar(1) ) returns @ReturnTable table ( StartDate varchar(8), EndDate varchar(8) ) as begin if @Type is null begin raiserror('正しいtypeを指定してください',-1,-1) end if @Date is null begin SET @Date = getdate() end if @Type = '0' begin insert into @ReturnTable select convert(varchar(8), dateadd(dd ,-2 ,@Date), 112) as StartDate, convert(varchar(8), dateadd(dd ,-2 ,@Date), 112) as EndDate, end if @Type = '1' begin insert into @ReturnTable select convert(varchar(8), @Date, 112) as StartDate, convert(varchar(8), @Date, 112) as EndDate end return end --------------------------------

  • ストアドファンクションのエラーについて

    PostgreSQLでストアドファンクションを作成しました。 ファンクションの内容は下記の通りです。 CREATE FUNCTION getRenban (VARCHAR) RETURNS VARCHAR(7) AS ' DECLARE key ALIAS FOR $1; code VARCHAR(7); code2 VARCHAR(2); code5 VARCHAR(5); renban INTEGER; new_code VARCHAR(7); BEGIN SELECT MAX(code) INTO code FROM M_ITEM WHERE flg = TRIM($1); code2 := TRIM($1); IF code IS NULL THEN renban := 1; ELSE SELECT SUBSTR(code, 2) INTO code5; SELECT TO_NUMBER(code5, ''99999'') INTO renban; renban := renban + 1; END IF; code5 := ''''; SELECT TO_CHAR(renban, ''00000'') INTO code5; SELECT code2 || code5 INTO new_code; RETURN new_code; END; ' language 'plpgsql' ; コンソール上で下記のコマンドを実行したらエラーが出力されました。 SELECT getrenban('01'); 出力されたエラーの内容は下記の通りです。 ERROR: value too long for type character varying(5) CONTEXT: PL/pgSQL function "getrenban" line 19 at SQL statement お恥ずかしいですがいくらコードを見てもどこが原因なのかわかりません。 申し訳ありませんがご教授お願いできませんでしょうか。 昨日から悩んでいます。 どうか助けて下さい、宜しくお願いします。