PostgreSQL中不存在模式错误

问题描述 投票:0回答:1

我在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”不存在。

postgresql function schema postgresql-9.1
1个回答
1
投票

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" || '%'
        )
© www.soinside.com 2019 - 2024. All rights reserved.