0

我是 SQL Server 的 postgres 新手。我正在设置一个将“posID”作为整数的函数,并且(我认为)从技能表中返回行。如果我将函数的返回类型设置为“技能”,则会出现错误:“最终语句返回的列太多。” 但是,如果我将返回类型设置为“技能”[](技能数组?),那么我会收到错误“最终语句必须只返回一列”。

我对正在发生的事情感到困惑。我认为 postgres 正在“看到”该作业 id 是作业表上的主键并且(因此希望该函数仅返回一行)但是无论是否使用主键我都会遇到相同的错误-所以也许是更简单的事情。

这是函数中的代码

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 回答