Tôi muốn tìm hiểu cách một hàm Postgres được lưu trữ có thể trả về một bảng, với các cột đã xác định. lợi nhuận Tôi đã sử dụng setof returnType:Làm thế nào để một hàm Postgres được lưu trữ trả về một bảng
-- create employeeSearchResult returnType
create type employeeAllReturnType as
(
id bigserial,
"positionId" integer,
"subjectId" bigint,
"dateEngaged" date,
"nextKin" text,
"nrcNo" text,
dob date,
father text,
mother text,
wife text,
"userId" integer,
"statusId" integer,
"mainCode" text,
"subCode" text
);
-- Search for emmployee by name
CREATE OR REPLACE FUNCTION "employee_search_by_name"(employeeNameIN text)
returns setof employeeAllReturnType as
$$
declare
results record;
resultsRow employee%rowtype;
nameIn text;
begin
nameIn = employeeNameIN || '%';
for results in select
employee.id,-- bigserial NOT NULL,
employee."positionId",-- integer,
employee."subjectId",-- bigint NOT NULL,
employee."dateEngaged",-- date,
employee."nextKin",-- text,
employee."nrcNo",-- text,
employee.dob,-- date,
employee.father,-- text,
employee.mother,-- text,
employee.wife,-- text,
employee."userId",-- integer NOT NULL,
employee."statusId",-- integer,
employee."mainCode",-- character(5) NOT NULL,
employee."subCode"-- character(10),
from employee, subject where employee."subjectId" = subject.id and (subject.name1 ILIKE nameIn OR subject.name2 ILIKE nameIn OR subject.name3 ILIKE nameIn OR subject.name4 ILIKE nameIn) loop
return next results;
end loop;
end;
$$ language 'plpgsql';
và cũng trở lại bảng():
-- Search for emmployee by name
CREATE OR REPLACE FUNCTION "employee_search_by_name"(employeeNameIN text)
returns table (id bigserial,
position integer,
subject bigint,
date_engaged date,
next_kin text,
nrc_no text,
dob date,
father text,
mother text,
wife text,
user_id integer,
status_id integer,
main_code text,
sub_code text) as
$$
declare
results record;
resultsRow employee%rowtype;
nameIn text;
begin
nameIn = employeeNameIN || '%';
for results in select
employee.id,-- bigserial NOT NULL,
employee."positionId",-- integer,
employee."subjectId",-- bigint NOT NULL,
employee."dateEngaged",-- date,
employee."nextKin",-- text,
employee."nrcNo",-- text,
employee.dob,-- date,
employee.father,-- text,
employee.mother,-- text,
employee.wife,-- text,
employee."userId",-- integer NOT NULL,
employee."statusId",-- integer,
employee."mainCode",-- character(5) NOT NULL,
employee."subCode"-- character(10),
from employee, subject where employee."subjectId" = subject.id and (subject.name1 ILIKE nameIn OR subject.name2 ILIKE nameIn OR subject.name3 ILIKE nameIn OR subject.name4 ILIKE nameIn) loop
return next results;
end loop;
end;
$$ language 'plpgsql';
Nhưng cả hai đều có kết quả đầu ra trong các định dạng sau:
"(1,1,1,2011-12-01,Timea,fg1254,1981-12-27,moses,sarada,timea,1,1,"ADM ","1 ")"
"(37,3,10,2011-11-11,s,s,2011-11-11,s,s,s,1,1,"OP ","1 ")"
Có anyway trong đó Tôi có thể có kết quả đầu ra như kết quả lựa chọn từ một bảng?
"1";1;1;"2011-12-01";"Timea";"fg1254";"1981-12-27";"moses";"sarada";"timea";1;1;"ADM ";"1 "
Dữ liệu kết quả xử lý đó từ đầu trước sẽ không yêu cầu trình phân tích cú pháp.
Không cần báo giá kép ở đó. –
Vui lòng kiểm tra câu trả lời bên dưới – greatkalu