• 締切済み

PostgreSQL(8.4.2)のユーザ定義関数(ストアドプロシージ

PostgreSQL(8.4.2)のユーザ定義関数(ストアドプロシージャ)を、 ODBC経由でVisualStudio2005から利用したいのですが、 サーバーエクスプローラーからユーザ定義関数を参照することが出来なくて悩んでいます。 ユーザ定義関数はpgAdminIIIで作成しました。 cse(Common SQL Environment)などのフリーのツールからは問題なく参照できます。 VisualStudioにユーザ定義関数として認識させるための何かおまじない的な物が必要なのでしょうか。 それともPostgreSQLとVisualStudioとの相性が悪いのでしょうか。 なおユーザ定義関数以外であるテーブルやビューは、 サーバーエクスプローラーから参照できます。

みんなの回答

回答No.1

古いディスプレイを使っているためか、添付画像がよく見えない状況での回答です。そのため、的を外しているかもしれませんが。。。 PostgreSQLで定義した関数は、あくまでも”SQL中でだけ”利用できる関数です。pgAdminIIIで表示されるのは、PostgreSQLで定義された関数ですから、表示されて当然です。 Visial Studioで管理されるユーザ定義関数は、Visual C/C++ や Visual Basic の命令文レベルで使用できる関数です。

1092eto
質問者

お礼

回答ありがとうございます。 もちろんPostgreのストアドプロシージャはCソースの一関数としては呼ぶことは出来ません。 ソース中にSQL文を直接埋め込んでもやりたいことは実現できるのですが、 なるべくソース中にSQLを埋めたくなかったのでストアドプロシージャを利用したいと考えました。 VisualStudioではODBCドライバ経由で、 テーブルやビュー、ストアドプロシージャにアクセス出来ます。 しかしここで問題が発生しています。 ウィザード上で利用したいストアドプロシージャが認識されずに 何も表示されません。 最初はストアドプロシージャの定義がおかしいと思ったので、 VisualStuidでは認識できないと思いました。 そこでSQLを実行できる他のツールでPostgreのDBに接続しましたが、 問題なくストアドプロシージャを認識し、実行結果も得ることが出来ました。 したがってVisualStudioでは何か手続きが必要なのか?もしくは認識できないのでは?と思い質問に至りました。 VisualStudioに同梱のSQLServerとかでは問題なくストアドプロシージャを認識できるのですが、 Postgreでは認識できていなかったので相性の問題かなとも思いました。 うまくまとまらずすみません。 以上です。宜しくお願いします。

関連するQ&A

  • ユーザー定義関数内でのsp_executesqlプロシージャの使用

    SQLServer2005を使用しています。 今、ユーザー定義関数を作成していて、クエリアナライザにて動作を検証しています。 ユーザー定義関数内で、sp_executesqlを実行しようとすると、 「サーバー : メッセージ 557、レベル 16、状態 2、プロシージャ F_GET_DAY、行 26 関数内から実行できるのは関数と拡張ストアド プロシージャだけです。」 というエラーが出ます。 sp_executesqlは、マスターデータベースの拡張プロシージャに位置づけられているので、実行可能だと思ったのですが・・・。 同じく、マスターデータベースの拡張プロシージャにである「sp_oacreate」の実行を試してみると、関数内で実行できました。 sp_executesqlは、関数内では実行できないのでしょうか。

  • PostgreSQLでストアドプロシージャについて

    皆さんのお陰でストアドファンクションを作成する事ができました。 ここで1つ、疑問が・・・ ネットでPostgreSQLの「CREATE PROCEDURE」を検索しても私が望んでいる情報を得る事ができませんでした。 申し訳ありませんがここで質問があります。 PostgreSQLで「CREATE PROCEDURE」はないんでしょうか。 PostgreSQLではストアドプロシージャとストアドファンクションは一緒なのでしょうか。 MySQLやSQL Serverではストアドプロシージャとストアドファンクションは別だった気がしますが・・・ ※違っていたらすみません。 どなたか私の疑問を解決していただけませんでしょうか。 宜しくお願いします。

  • PostgreSQLで使えるツール

    PostgreSQLで使えるツール データセンターにPostgreSQLの入ったサーバを置いており、リモートでデータベースの管理や CSVでのデータの挿入や編集等を行いたいのですが、何かよいツールはないでしょうか。 CSEが使えるかと思って試したのですが、データセンターの設定で、ODBC接続ができません。 何卒、よろしくお願いします。

  • ユーザーが定義したストアドプロシージャ一覧の取得

    SQL Server 2005で、 db内のストアドプロシージャ一覧を取得したいと思っています。 select o.* from syscomments c , sysobjects o where c.id = o.id and o.type='P' order by o.name といったように記述すれば一覧は取得できるようですが、 これだとシステムストアドプロシージャも表示されてしまいます。 ユーザーで定義したストアドプロシージャのみ取得したいのですが、可能でしょうか? 何か良い手段をご存じの方がいらっしゃいましたらアドバイス頂けますと嬉しいです。 どうぞよろしくお願いいたします。

  • csvデータをPostgreSQLにコピー

    # rpm -qa | grep postgresql を実行してみると、 postgresql-python-7.2.2-1 postgresql-odbc-7.2.2-1 postgresql-7.2.2-1 postgresql-perl-7.2.2-1 postgresql-server-7.2.2-1 postgresql-devel-7.2.2-1 postgresql-contrib-7.2.2-1 postgresql-libs-7.2.2-1 postgresql-jdbc-7.2.2-1 postgresql-tcl-7.2.2-1 が表示されたため、 # postgres start を実行すると、 "root" execution of the PostgreSQL server is not permitted. The server must be started under an unprivileged user id to prevent more information on how to properly start the server. と表示されます。そこで、本サイトのQ&Aを参考にして、 # /etc/init.d/postgresql start を実行したところ、起動しました。Windows版では、pgAdminIIIのクエリーツールで以下のようにすれば、csvデータ(UTF8)をPostgreSQLの所定のテーブルにインポートできます。 COPY tablename FROM E'C:\\test\\testdata.csv' WITH CSV; Linux版ではどのようにするのでしょうか?

  • サーバー移行前後のストアドのチェック

    SQL Server 2000を2008に移行をしようとしています。 そのため、2000で使用していたストアドやユーザ定義関数が、 2008では使用出来ない可能性があります。 このチェックをしたいのですが、 ストアドやユーザ定義関数が大量にあり、 お手上げ状態です。 何かよい方法をお教えいただけないでしょうか。

  • ユーザー定義関数

    自サイトのアクセス解析をしようと SERVER変数を取得してログを解析しようとPHPで組んでみたのですが、 いまいちユーザー定義関数の上手?な使い方がわかりません。 アドバイスを頂けると幸いに思います。 データはcsv(すみませんSQL使えません)ファイルに1アクセス1行 日付,時間,キャリア等々 と記述しています。 ドコモをカウントする場合 function doco( $Key){ $handle = fopen( "LogFile", "r"); $count= 0; while (($data = fgetcsv($handle)) !== FALSE) {  if( mb_eregi( $Key, $data[2])){ $count++; } } echo $count; fclose($handle); } doco( "DoCoMo"); となり、さらに時間別にドコモで0時に来訪したのは何人? といった場合 ifの中にさらに時間の判別のifを記述し 引数の部分を増やしdoco( 引数1,引数2)見たいな感じにしますが そうではなく、 ドコモだけの人数を取り出したい場合も ドコモから12時の人数だけを取り出したい場合も 同じユーザー定義関数を使う方法はありますか? 宜しくお願いします。

    • 締切済み
    • PHP
  • 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して確認するくらいしか方法はありませんでしょうか? 申し訳ございませんが、もしご存知の方、ご教示いただけませんでしょうか? なお、設定やマシン環境で記述不足等ありましたら、ご指摘いただければと思います。 以上です。よろしくお願いします

  • Excell:ユーザー定義関数で、HyperLinkを返したい

    エクセルで、ユーザー定義関数を作成しています。 戻り値をHyperLinkにしたいのですが、可能でしょうか? 指定したセルの値を参照して、動的にURLを 作成するところまでは、できたのですが、HyperLinkとして セルに書き戻す事ができません。 下記のように文字列になってしまいます。 =HyperLInk("http://hoge.php?var=10","●") ↑を、リンクとして機能させるには、どうすれば 良いかご存知でしたら、教えて下さい。 ※一旦URLだけを文字として表示させ、  その上に、HyperLink関数をかぶせれば、  目的が達成できることはわかっていますが、  それでは、使い勝手が悪いのです。 どうぞ、よろしくお願い致します。

  • Accessプロジェクト ストアドプロシージャでのデータ更新

    AccessのMDBをADPへ作り変えています。 MDBの更新クエリーの場合、「レコードの更新」欄に更新したい値を記述します。たとえば、ユーザー定義関数を使っている場合は、ユーザー関数名([○○○]) ・・・。 これと同じことを、ADPのストアドプロシージャで行う場合はどのようにすればよいのでしょうか? スツアドプロシージャは「デザイナを使用してストアドプロシージャを作成する」を使って作成しています。ここで、「新しい値」欄に ユーザー関数名(○○○) と記述すると、 ”ADOエラー:"ユーザー関数名"は関数名として認識されません” となります。 初めてADPを使用するのでよくわかりません。 以上、よろしくお願いします。