postgres正好有一两列

时间:2013-03-27 05:18:16

标签: postgresql

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

我对发生的事感到困惑。我认为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;

1 个答案:

答案 0 :(得分:2)

您需要使用returns setof <table>返回多行,结帐documentation

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;