0

SQLサーバーからpostgresを使用するのは初めてです。「posID」を整数として受け取り、(私が思うに)スキルテーブルから行を返す関数を設定しています。関数の戻りタイプを「スキル」に設定すると、「finalステートメントが返す列が多すぎます」というエラーが発生します。しかし、戻りタイプを「スキル」[](スキルの配列?)に設定すると、「最終ステートメントは正確に1つの列を返す必要があります」というエラーが発生します。

私は何が起こっているのか混乱しています。postgresはそのjobsidがjobsテーブルの主キーであることを「認識」していると思いました(したがって、関数が1行のみを返すことを期待しています)が、主キーの有無にかかわらず同じエラーが発生します-おそらくそれはさらにシンプルなもの。

これが関数のコードです

select * from "Skills" inner join "Jobs" on "Skills"."SkillID"="Jobs"."SkillID" where "JobID"="posID"

これがジョブテーブルです(PKなしの場合もあります)

CREATE TABLE "Jobs"
(
  "JobID" integer NOT NULL,
  "SkillID" integer,
  "Title" character varying[],
  CONSTRAINT "PK" PRIMARY KEY ("JobID")
)

これがスキルテーブルです

CREATE TABLE "Skills"
(
  "SkillName" character varying(50),
  "SkillID" integer
)

これが関数です(異なるコードを使用します。明らかに上記のコードを受け入れません)

CREATE OR REPLACE FUNCTION "skillsForJob"("posID" integer)
  RETURNS "Skills" AS
'select * from "Skills"'
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION "skillsForJob"(integer)
  OWNER TO postgres;
4

1 に答える 1

2

returns setof <table>複数の行を返すには、ドキュメントをチェックアウトするために使用する必要があります

CREATE OR REPLACE FUNCTION skillsForJob(posID integer)
  RETURNS "Skills" AS
'select "Skills".* from "Skills" inner join "Jobs" on "Skills"."SkillID"="Jobs"."SkillID" where "JobID"=$1'
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION "skillsForJob"(integer)
  OWNER TO test;
于 2013-03-27T05:30:12.170 に答える