• ベストアンサー

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

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

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

うーん? これ、参考になるかな・・・ http://dev.mysql.com/doc/refman/5.1/ja/server-parameters.html

kisoyasa
質問者

お礼

さっそくご回答いただき、ありがとうございました。 参考になりました。

関連するQ&A

  • 全ストアドを対象に文字列を置換する方法について

    こんばんわ。 SQLServer2008にて1データベース内の全ストアドを対象に、 ストアドプロシージャ記述内で特定の文字列を検索し、置換する方法を考えています。 以下のようなsqlで、ストアド内に文字列があるものを検索することはできたのですが、 ここから先、「★★★」を「○○○」にREPLACEする方法がわかりません。 select routine_name from information_schema.routines where routine_definition LIKE '%★★★%' and routine_type='procedure' 以下のようなsqlで更新しようとしたら、エラーが発生しました。 update information_schema.routines set routine_definition = REPLACE(routine_definition, '★★★', '○○○') where routine_name = 'XXX' (error:システム カタログへのアドホック更新は許可されません。) 不定期にデータベース名を変更することがあり、ストアドの数が多いため、 一括で変換できる方法がないかと探しています。 手作業で変更していく他ないでしょうか。 なにかヒントだけでもご教示いただけると嬉しいです。 よろしくお願いします。

  • ストアドファンクション⇒プロシージャ呼出し失敗する

    参考の通りに、ストアドプロシージャ作成SQL文を発行し、 コマンドライン上からは、以下の通りの結果1となり、 レコードがinsertされます。 <結果1> mysql> call logger('ほげ', 'ホゲ'); Query OK, 1 row affected (0.01 sec) mysql> select * from PROCEDURE_LOG; +--------+--------+---------------------+ | NAME | QUERY | EXECUTE_DATE | +--------+--------+---------------------+ | ほげ | ホゲ | 2014-03-26 10:41:26 | +--------+--------+---------------------+ 1 row in set (0.00 sec) ですが、testというストアドファンクションから呼び出してみましたが、 以下の結果2の通り、失敗します。 <結果2> mysql> select test(); ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger <test> BEGIN CALL logger('test','1'); RETURN CONCAT('END'); END 現在動作している環境では、どこでエラーが発生したかがわからず、 ロガーの処理をなんとしても実装したいのですが、 いろいろ試してみても、解決できませんでした。 ご教示のほど、よろしくお願いします。 <参考> http://treeapps.hatenablog.com/entry/20120106/p1 <ストアドプロシージャ作成SQL文(logger)> SET NAMES UTF8; delimiter // -- ログ出力 DROP PROCEDURE IF EXISTS logger// CREATE PROCEDURE logger( IN PROCEDURE_NAME TEXT, IN SQL_TEXT TEXT ) BEGIN DECLARE CNT INT; CREATE TABLE IF NOT EXISTS PROCEDURE_LOG ( NAME VARCHAR(64), QUERY TEXT, EXECUTE_DATE TIMESTAMP, KEY IDX1 (NAME, QUERY(64), EXECUTE_DATE) ) ENGINE=MYISAM DEFAULT CHARSET=UTF8; -- 古いログを削除 SELECT COUNT(*) INTO CNT FROM PROCEDURE_LOG; IF CNT >= 1000 THEN DELETE FROM PROCEDURE_LOG LIMIT 1; END IF; -- テーブルにログを記録 SET @sql = CONCAT('INSERT INTO PROCEDURE_LOG VALUES (', QUOTE(PROCEDURE_NAME), ',', QUOTE(SQL_TEXT), ', null)'); PREPARE stmt FROM @sql; EXECUTE stmt; END // delimiter ;

    • ベストアンサー
    • MySQL
  • SQLServer2005のストアドプロシージャのデバックの設定方法をご教示ください

    SQLServer2005でストアドプロシージャを作成しました。 VisualStudioを使用すればデバッグ(一行ずつ実行して、変数の中身や動作を確認)できるということですが、設定がうまくできません。 ストアドプロシージャ作成は初めてで、周りにも経験者がいないため解決策がわからない状態です。 ご存知の方、気がついたことがある方は、ぜひご教示ください。 ■■ マシン環境 ■■ OS:Windows2003Server DB:SQLServer2005 ■■ 試した方法 ■■ 1.DBサーバマシンのVisualStdio2005を使用 上記マシンに、SQLServer2005をインストールしたとき、  VisualStudio2005が自動的にインストールされたので これを使用することを考えました。 VisualStudio2005の「サーバーエクスプローラー」に、 今回作成したストアドプロシージャを表示するところまではできたのですが、 デバッグ実行できません。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウを表示するらしいのですが メニューには、以下のものしか表示されません。  新しいプロシージャの追加 / 開く / 実行 ためしに実行すると、ストアドプロシージャは動作します (テーブルへのデータINSERTをストアドでコーディングしており、実行後に指定値が入っていたため) しかし、デバッグポイントを設定できず、ステップ実行もできません。 2.別マシンのVisualStdio2003を使用 私の開発マシンにはVisual Studio 2003が入っているため、 DBサーバマシンとリモートで接続して、上記と同様の設定を行いました (このVisual Studio2003はC#開発用にインストールしたものです)。 こちらは、メニューに「ストアドプロシージャのステップイン」が出ました。しかし……。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウが表示されたときに、以下のメッセージボックスが出ます。 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 デバッグウインドウ上でデバッグポイントは設定できますが、 ストアドプロシージャを実行してもデバッグポイントでとまらず ステップ実行もできません。 (同様にINSERTしたテーブル値から、ストアド自体は動作していると判断) なお、1.2.共にSA認証でSQLServer2005にログオンしています。 SQLServer のデバッグできるのは、sysadminサーバロールを持つユーザだけらしいですが、 SA認証で使用しているユーザには「sysadmin」のサーバロールは設定しています。 ■■ 質問 ■■ 1) QLServer2005インストールで自動的にインストールされるVisualStudioでは、 ストアドプロシージャのデバッグはできないのでしょうか? それとも、SQLServer2005インストール時に、開発環境等の追加設定や、 別途VisualStudio2005をインストールする必要があるのでしょうか? それとも、別にSQLServer management Studioや構成ツール等で設定が必要なのでしょうか? または、メニューに「ストアドプロシージャのステップイン」を出す設定(方法)をご存知の方、ご教示をお願いします。 2) 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 このメッセージはどうすれば回避できるのでしょうか? SQL Server データベースが正しくセットアップされていないということですが、 これまで特に支障がないため問題はないと思っているのですが……。 検索で以下のサイトを見つけましたが、SQLServer2000のため参考になるかは疑問です。   http://support.microsoft.com/kb/839280/ja   http://support.microsoft.com/kb/886680/ja 以下のサイトは、どうすれば原因回避できるのかわかりませんでした(勉強不足を感じております)   http://msdn2.microsoft.com/ja-jp/library/ms164014.aspx master.sp_sdidebug を実行する権限の設定方法をご存知の方、ご教示いただけませんでしょうか? 3) Visual Studio以外で、SQLServer2005のストアドプロシージャをデバッグする方法がありましたらご教示ください。 変数の途中の値を一時テーブルにINSERTして確認するくらいしか方法はありませんでしょうか? 申し訳ございませんが、もしご存知の方、ご教示いただけませんでしょうか? なお、設定やマシン環境で記述不足等ありましたら、ご指摘いただければと思います。 以上です。よろしくお願いします

  • mysqlの文字コードの変更方法について教えてください。

    XAMPPを使ってるんですが、mysql\bin\のmy.cnfファイルの [mysqldump]と[client]部分にdefault-character-set=utf8 と記述したんですが、コマンドプロンプトで Show VARIABLES LIKE 'CHAR%'; と入力し確認したんですが、 latin1のままになってます。 どうすれば変更できますか?

  • ストアドをまたがるローカル一時テーブル

    SQL Server 2005 でストアドプロシージャ(以降SPと省略) を作成しています。 複数の SP から、構造が同じローカル一時テーブル (テーブル名が # から始まるテーブル) を使用したい為、 CREATE するだけのローカル一時テーブル作成SP、 DROP するだけのローカル一時テーブル削除SPを、 それぞれ作成しました。 次に、ローカル一時テーブルを使用したい SP 内で、 ローカル一時テーブル作成SP を EXECUTE 後、 ローカル一時テーブルに対し、INSERT をしたところで 以下のようなエラーとなります。 ※INSERT の変わりに、SELECT にしてみても同様でした。 メッセージ 208、レベル 16、状態 0、プロシージャ TEST_SP、行 155 オブジェクト名 '#LocalWorkTable' が無効です。 ※TEST_SP とは、ローカル一時テーブルを使用したい SP の名前  #LocalWorkTable とは、ローカル一時テーブルの名前 グローバル一時テーブル (テーブル名が ## から始まるテーブル) に変更すると、正常に動作しましたが、 セッションをまたがって使用させたくないのです。 あと、 ローカル一時テーブル作成SPを使用せずに、 ローカル一時テーブルを使用したい SP 内で、直接 CREATE すれば 正常に動作しましたが、 上記にも書いたように、複数の SP で構造が同じローカル一時テーブル を使用したいので、できれば、別 SP にしたいと考えております。 ストアドをまたがって、ローカル一時テーブルを使用する事は できないのでしょうか?

  • OnTimeの取り消しについて

    ヘルプには次のように記述がありますが、指定時刻に 実行させるプロシージャーの取り消しはサンプルの手順 で動作しますが、何秒後・・・を指定した場合のサンプル はうまく取り消せません。"実行時エラー '1004'"と なります。 この場合、どのように記述すればいいのでしょうか? 使用例 次の使用例は、現在から 15 秒後に my_Procedure を実行します。 Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 次の使用例は、午後 5 時に my_Procedure を実行します。 Application.OnTime TimeValue("17:00:00"), "my_Procedure" 次の使用例は、前の使用例で設定した OnTime メソッドの設定を取り消します。 Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ Procedure:="my_Procedure", Schedule:=False

  • [Linux] MySQL4をインストール後、mysql.cnf上で指定した.sockを読み取らないエラーについて質問です

    初心者で質問の内容が薄いかもしれないですが、よろしくお願いします。 現状LinuxのサーバにはMySQL3が入っており、稼動中です。 そこに新規でMySQL4をインストールしたのですが、 /usr/local/mysql/4122/bin/mysql_install_db --user=mysql 上記コマンドで初期化をしようと思ったらエラーだと思うのですが 下記のような文が出てきました。 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/local/mysql/4122/bin/mysqladmin -u root password 'new-password'! これはrootのパスワードを設定しないといけないのだと思って設定しようとしました。 するとエラー文が。。 error: 'Can't connect to local MySQL server through socket '/usr/local/mysql/4122/mysql.sock' (2)' Check that mysqld is running and that the socket: '/usr/local/mysql/4122/mysql.sock' exists! mysql.sockの場所は /usr/local/mysql/4122/share/mysql/mysql.sock にあるんで、この場所を /usr/local/mysql/4122/share/mysql/my-large.cnf このmy-large.cnfに記述してありますが、なぜエラー文で下記の場所を読み取っているのかわからなくて困ってます。。 socket: '/usr/local/mysql/4122/mysql.sock' exists! どうかお助けください。 よろしくお願いします!

  • Oracleの動作が遅くなった

    お世話になります。 現在、WEBサーバ+DBサーバで運用している環境があるのですが、 WEBサーバ側には、Oracle9iASが、 DBサーバには、Oracle9iDBがそれぞれインストールされています。 WEBサーバから要求があったら、DBサーバのデータベースに登録されている データを返すと言った事を実現しているのですが、 この前、WEBサーバ側に、各種データやHTMLコンテンツの投入を行い、 DBサーバ側に、ストアドプロシージャを投入したのですが、 それ以降、動作が急激に遅くなりました。 遅くなった原因は、DBサーバ側にあるのでしょうか? それともWEBサーバ側にあるのでしょうか? とりあえず、DBサーバを再起動してみようとは考えているのですが、 再起動だけで、すむ問題なのでしょうか? ちょっと漠然としていて、分かりにくいかもしれませんが、 どなたか分かる方いらっしゃいましたら、 ご教授の程、よろしくおねがいします。 OS:WINDOWS2000 Server

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

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

  • ストアドファンクションについて

    最近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に関係のない質問かもしれませんがよろしければお教えください。