10

pgAdminを使用してPostgres8.4で関数を作成しようとしていますが、次のコードがあります

CREATE OR REPLACE FUNCTION spcwriteperson(IN fname varchar(20))
  RETURNS VOID AS
$BODY$
    INSERT INTO person ("firstName") VALUES(fname);
$BODY$
  LANGUAGE sql VOLATILE
  COST 100;

これを実行しようとすると、VALUES(fname)のfnameが列ではないと文句を言います。私はMySQLとSQLServerでsprocと関数を書いているところから来ています。なぜこれが機能しないのか、または私が間違っていることについて何か助けはありますか?

4

2 に答える 2

13

番号付きパラメータを使用したくない場合は、PL/PGSQLを使用できます。

CREATE OR REPLACE FUNCTION spcwriteperson(fname varchar(20)) RETURNS VOID AS
$$
BEGIN
    INSERT INTO person (firstName) VALUES (fname);
END
$$
  LANGUAGE 'plpgsql';

PL / PGSQLは、SQLServerのT-SQLに似た言語も提供します。PL / PGSQLには、制御構造、変数、およびそのすべての楽しいものがあります。PostgreSQLのSQL言語の実装は、使用可能な機能についてはるかに厳密です。これはSQLの優れた実装ですが、手続き型プログラミング言語ではなく、クエリ言語です。

于 2011-03-13T22:04:22.123 に答える
7

SQL言語関数のパラメーターには、、、などの番号が付けられ$1$2います。詳細については、ドキュメントを参照してください。名前付きパラメータとより高度な機能が必要な場合は、 pgSQLを使用できます。

于 2011-03-12T05:15:45.747 に答える