我在PostgreSQL中执行以下功能时具有下面的表和功能,它显示错误:模式“ tblmark”不存在。请帮助。
CREATE TABLE "LandXML_QCC_ParcelMarks"("DPID" TEXT,"From" TEXT,"Name" TEXT);
INSERT INTO "LandXML_QCC_ParcelMarks" VALUES ('1','ram','kumar');
CREATE TABLE "LandXML_QCC_ParcelInformation"("DPID" TEXT,"Pntref" TEXT)
INSERT INTO "LandXML_QCC_ParcelInformation" VALUES ('1','ram');
CREATE OR REPLACE FUNCTION GetParcelNonParcel(PlanID TEXT)
RETURNS TEXT AS $GetParcelNonParcel$
DECLARE
tblMark RECORD;
parCount INTEGER;
parNonCount INTEGER;
totalParNonCount TEXT;
tblCou INTEGER;
BEGIN
parCount=0;
parNonCount=0;
FOR tblMark IN (SELECT * FROM "LandXML_QCC_ParcelMarks" WHERE "DPID" = PlanID) LOOP
SELECT COUNT(*) INTO tblCou FROM "LandXML_QCC_ParcelInformation"
WHERE "DPID"=PlanID
AND (
"Pntref" LIKE '%' || tblMark.From || ',' || tblMark.Name '%'
OR
"Pntref" LIKE '%' || tblMark.Name || ',' || tblMark.From '%'
);
RAISE NOTICE 'Value: %', tblCou;
IF tblCou > 0 THEN
parCount = parCount + 1;
RAISE NOTICE 'Value: %', parCount;
ELSE
parNonCount = parNonCount + 1;
END IF;
END LOOP;
totalParNonCount = CAST(parCount AS TEXT) || ',' || CAST(parNonCount AS TEXT);
RAISE NOTICE 'Value: %', totalParNonCount;
RETURN totalParNonCount;
END;
$GetParcelNonParcel$ LANGUAGE plpgsql;
select GetParcelNonParcel('1');
执行上述功能时,显示错误:模式“ tblmark”不存在。
在SELECT
循环内的FOR
中,您具有以下条件:
... AND (
"Pntref" LIKE '%' || tblMark.From || ',' || tblMark.Name '%'
OR
"Pntref" LIKE '%' || tblMark.Name || ',' || tblMark.From '%'
)
两次都缺少尾随||
的并置运算符'%'
。此外,您没有正确引用记录的列。由于您使用"
(双引号)建立了它们,因此始终需要以完全相同的方式引用它们(这是您不应该这样做的原因。因此,如果不晚就可以将其更改为名称(不带引号)。
使用您的瞬时列名,这应该对您有帮助:
... AND (
"Pntref" LIKE '%' || tblMark."From" || ',' || tblMark."Name" || '%'
OR
"Pntref" LIKE '%' || tblMark."Name" || ',' || tblMark."From" || '%'
)