我是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;
答案 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;