• 締切済み

プロシージャがみつかりません、のエラー

Postgresを使っています。 あるプロシージャのCREATEは成功しているのですが、 (psql -U hoge -f hoge.sql -a -n hoge > hoge.log 2>&1でCREATEが返る) 実際に呼び出すと、 Function 'hoge(int4, int4, int4, int4, unknown, unknown, unknown, int4, unknown, unknown, unknown)' does not exist が返ります。 そこで試行錯誤してパラメータ数を変更してみたところ、 hoge(int2, int2, int4, int2, int2, int4, int2, int2, varchar(40), char(1), varchar(5)) ではNGで hoge(int2, int2, int4, int2, int2, int4, int2, int2, varchar(40), varchar(5)) はOKになります。 hoge(int2) などはもちろんOKになります。 どうしても、char(1)のやつでエラーになるので、 これのタイプをint2やvarchar(1)に変えてみましたが 結果は同じでした。 実はCREATEが成功していないということがあるでしょうか? かれこれ悩んで2日目ですがどこを調べたらよいか見当がつきません。 ありがちなエラーがお分かりになりましたら、どうぞご指摘ください。

みんなの回答

  • J_ANBI
  • ベストアンサー率48% (24/49)
回答No.1

もう少し情報が欲しいと思います。 基本的な情報としては、ご利用のOS名とVersion、 PostgreSQLのVersionがあると解りやすいことが多いです。 さらに、psqlのコマンドラインから、 \d テーブル名 と入力すると、テーブルの構成が表形式で出力されますので、 この結果はどうなっていますか? また、関数hogeでは、実際にどんな処理をしているのでしょう? 差し支えない程度にこれらの情報を出していただければ、 解るかもしれません。  蛇足ですが、SQLは、DBMSによって少なからず文法が異なります。SQL 辞典のような複数のDBMSについて扱った本等を参考にする際には、Postgr esに対応した形式になっているか気を配る必要があると思いますが、その 辺は大丈夫ですか?

参考URL:
http://www.postgresql.jp/document/index.php3
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ストアドプロシージャ作成時のエラーについて

    お世話になっております。 CREATE PROCEDURE AAA (IN param INT) BEGIN SELECT CD, NAME FROM TBL WHERE TBL_KEY = param; END INTEGER型の引数を渡してVARCHAR型のCD、NAMEを取り出す程度のストアドプロシージャを作成しようとすると 1303 - Can't create a PROCEDURE from within another stored routine. なるエラーが表示されて作成ができません。 このエラーの理由についてコメント頂ければ幸いです。

    • ベストアンサー
    • MySQL
  • ストアドプロシージャでのパラメータのデータ型の質問

    いつもお世話になっております。たびたびの質問で恐縮です。 ストアドプロシージャでのパラメータのデータ型が設定できず困っております。たとえば次はパラメータの文字を表示させるものです。 CREATE OR REPLACE PROCEDURE test(p VARCHAR2(10)) IS t VARCHAR2(10); BEGIN t:=p; DBMS_OUTPUT.PUT_LINE(t); END; / コンパイルエラーになるので、パラメータのデータ型を、VARCHAR2のように(10)を取るとうまくいきます。しかし、変数定義の「t VARCHAR2(10)」の(10)を取ると文字列の制約制限からはずれるとのエラーになります。 VARCHAR2というのは、PL/SQLの変数あるいはパラメータではどのように記述すればよろしいのでしょうか。 基本的なことを理解しておらず、申し訳ありません。 どうか、よろしくお願いいたします。

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

    お世話になります。 SQLServseのストアドプロシージャで、あるテーブルのテストデータを100件ほど作成したいと思っています。 しかし、プロシージャを実行すると「プライマリキーが重複しています」とエラーが出ます。 テーブル内にはすでにCODE='0001'と'0101'の2件が存在します。そのため挿入開始コードは'0002'としたのですが・・・。まだ同じエラーが発生します。 テーブル名:MST_USER  CODE char(4) ←キー  KBN  char(2)  NAME varchar(40)  PASS varchar(10) 作成したプロシージャ CREATE PROCEDURE dbo.test_update_USER AS declare @count int declare @kbn int set @count = 2 set @kbn = 0 while 1 = 1 begin update MST_USER set CODE = right('0000' + ltrim(str@count)), 4), KBN = right('00' + ltrim(str(@kbn)), 2), NAME = 'test' + ltrim(str(@count)), PASS = 'test' + ltrim(str(@count)) set @count = @count + 1 if (@count > 100) break if (@kbn > 3) set @kbn = 0 else set @kbn = @kbn + 1 end GO 何か間違えているのか自分ではわからなくなっている状態です。 どなたかご指摘いただけると幸いです。

  • PostgreSQLのpsqlでユーザの扱いがうまくいかない

    こんにちは ただいま、PostgreSQL7.2.3をインストール(Redhat7.3)し、これからpsqlを使い、SQL操作をしようとしていたところですが、psqlと入力すると "psql: FATAL 1: Database "postgres" does not exist in the system catalog."となります。 PostgreSQLのユーザは "postgres","nobody"です。 現在、postgresからpostmaster -Sで起動しています. 下記に端末で行った作業内容をコピーしてみました。 今回インストールの参考にした書籍は"PHPxPostgreSQLで作る最強Webシステム」石井達夫著です。この本の手順に従ったつもりですが、うまくいきません。 [postgres@www root]$ postmaster -S [postgres@www root]$ psql -l List of databases Name | Owner | Encoding -----------+----------+---------- php | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (3 rows) [postgres@www root]$ select dtname from php bash: syntax error near unexpected token `from' [postgres@www root]$ select dtname from template0 bash: syntax error near unexpected token `from' [postgres@www root]$ [postgres@www root]$ psql select dtname from php psql: warning: extra option from ignored psql: warning: extra option php ignored psql: FATAL 1: Database "select" does not exist in the system catalog. [postgres@www root]$ psql -l List of databases Name | Owner | Encoding -----------+----------+---------- php | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (3 rows) [postgres@www root]$ psql psql: FATAL 1: Database "postgres" does not exist in the system catalog.

  • ストアドプロシージャでトランザクション処理をするにはどうすれば良いので

    ストアドプロシージャでトランザクション処理をするにはどうすれば良いのでしょうか? 複数のテーブルの行をストアドプロシージャで一括削除したいのですが、 エラーが発生した場合は、ロールバックしたいと思っています。 たとえば、 create table A (id INT, name VARCHAR(32)); // idと名前を持つテーブルA create table B (id INT, address TINYTEXT); // idと住所を持つテーブルB の二つのテーブル(idで紐付け)で、 Aの行が削除されたらBの行を削除するが、Bの削除でエラーが出た場合はAの削除をロールバックする。 という処理を行いたいのです。(ロールバックが可能であれば、ストアドプロシージャでなくても構いません。) どのように書けば良いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • データベースを作成するプロシージャ

    Webで動作するシステムをユーザー単位でDBを作成し、管理しようと思うのですが、(1)DBを作成するプロシージャというものは作成できるのでしょうか? (2)というかそのようなWebシステムを作成したい場合、1ユーザーにつき1DBという管理方法で正しいのでしょうか? (3)1ユーザーにつき1DBの場合、MYSQLのDBはMY.INIで設定されたメモリを超えない範囲ならいくつでもDBを作成できるのでしょうか? (4)そして作成するプロシージャを作成する場合、以下のような感じでINパラメータのusernameをプレフィックス「DB_」の後ろにつけて作成しようと思うのですが、その場合パラメータをDB_の後ろに連結するにはどのように記述したらよいのでしょう? userkanridb:ユーザを管理しているメインのDB。ここにプロシージャを作成しようと思っています。 DELIMITER $$ DROP PROCEDURE IF EXISTS `userkanridb`.`newDB` $$ CREATE PROCEDURE `userkanridb`.`newDB` (in username integer(8)) BEGIN DROP TABLE IF EXISTS `DB_`.`mConfig`; CREATE TABLE `DB_`.`mCconfig` ( `shime` int(2) NOT NULL, `usernm` varchar(20) NOT NULL, `style` tinyint(1) NOT NULL, `message` varchar(20) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; END $$ DELIMITER ; ご伝授御願いします。 MySQLのバージョン:MYSQL5.0.51

    • ベストアンサー
    • MySQL
  • phpMyAdminからストアドプロシージャを

    phpMyAdminからストアドプロシージャを作成したいのですが、エラーが表示され作成できません。 DELIMITER // CREATE PROCEDURE proc1(INT pa char(10)) BEGIN update sum_table set blank = pa; END; // DELIMITER ; これを実行したところ以下のエラーが出ました。 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT pa char(10)) BEGIN update sum_table set blank = pa; END' at line 1 -------------------------------------------------------------------------------- そこでソースから「DELIMITER」を消してもう一度実行してみました。 CREATE PROCEDURE proc1(INT pa char(10)) BEGIN update sum_table set blank = pa; END; すると今度は以下のエラーが表示されました。 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT pa char(10)) BEGIN update sum_table set blank = pa' at line 1 どこが間違っているかわからず困っております。 初歩的な質問で凝縮ですが、どなたかご教示いただけますでしょうか?

  • ストアドプロシージャの実行方法

    test()というストアドプロシージャを作成しました。 ユーザーマニュアルに従いcall testとコマンドを打つと以下エラー ERROR 1146 (42S02): Table 'xxxxx.test' doesn't exist マニュアルにcall sp_nameとあるので call sp_testとしてみるとエラーメッセージが以下に変わったので ERROR 1305 (42000): PROCEDURE xxxxx.sp_test does not exist ストアドプロシージャ名sp_testに変更してみたのですが、結局 ERROR 1146 (42S02): Table 'xxxxx.sp_test' doesn't exist というエラーしか出ません・・・。mysqlのバグなのでしょうか? バージョン 5.0です

  • ファイルを用いて一括でテーブルを作成できない

    csvデータをインポートするためにデータベース"database_6"を作成し、"create.sql"というファイルをユーザ"database_6"のホームディレクトリ"database_6"に配置した後、"database_6"でログインして、下記コマンドを実行し、テーブル"music"を作成しようとしたところ、 $ psql -e -f create.sql bash: psql: command not found というエラーメッセージが表示されます。なお、PostgreSQLは自動起動設定されています。"database_6"のOwnerは"postgres"で、下記の書籍に記載された方法(別の方法は何も記載されていない)でデータベース"database_6"を作成しました。 $ createdb database_6 で作成しまいた。そこで、同じく下記の書籍に記載された方法(別の方法は何も記載されていない)でユーザ"database_6"を作成しました。 $ createuser -d -A database_6 なお、ユーザ"postgres"を用いた場合には、 FATAL: database "postgres" does not exist というエラーメッセージが表示されます。

  • SQLServerのストアドで戻り値取得したい。

    こんにちわ。 いまSQLServer2005でストアドを作成しています。 あるテーブルをSELECTして,あるカラムと件数の両方を出力パラメータに取得したいのですが, 件数は取得できるのですが,カラムが取得できません。 ちなみに下記のようなコードになります。 create procedure funLoginCheck (@UserID char(5), @PassWord varchar(10), @RowCount int output, @DeptID char(2) output) as select * from MST_Employee where EmployeeID = @UserID And PassWord = @PassWord; set @deptid = deptid」 deptidを出力パラメータに渡す方法がわかりません。 初歩的なことかもしれませんが, 教えてください。よろしくお願いします。

このQ&Aのポイント
  • 用紙交換をしてトレイをセットしたところ抜けなくなってしまいました。取り出し方法や用紙の詰まりを確認しましたが解決しません。
  • Windows10で有線LAN接続されており、ひかり回線を使用しています。
  • ブラザー製品に関する質問です。
回答を見る