схема не существует ошибка в Postgresql - PullRequest
0 голосов
/ 05 октября 2019

У меня есть таблицы и функции ниже при выполнении функции ниже в 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" не существует.

1 Ответ

1 голос
/ 05 октября 2019

В вашем 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" || '%'
        )
...