#sql #postgresql #plpgsql
Вопрос:
Я получаю ошибку — ОШИБКА: слишком мало аргументов для format() КОНТЕКСТ: функция PL/pgSQL master_packs.newproccheckupdateadd(текст,текст) строка 6 при ВЫПОЛНЕНИИ SQL состояние: 22023
EXECUTE FORMAT ('INSERT INTO "master_packs"."list"("serialNumber","packType","barcode","ownopsNumber","createdAt","updatedAt","assetName","assetTag") VALUES("IMEI", 0, 0, 0, %s, %s, "assetName", %s) RETURNING "IMEI", "createdAt", "updatedAt", "assetTag", "assetName"');
Пожалуйста, посоветуйте. Для справки я привел весь код ниже —
CREATE or REPLACE PROCEDURE "master_packs".newProcCheckUpdateAdd("IMEI" text, "battery_pack_number" text) language 'plpgsql' AS $BODY$ declare retval text; begin EXECUTE FORMAT ('INSERT INTO "master_packs"."list"("serialNumber","packType","barcode","ownopsNumber","createdAt","updatedAt","assetName","assetTag") VALUES("IMEI", 0, 0, 0, %s, %s, "assetName", %s) RETURNING "IMEI", "createdAt", "updatedAt", "assetTag", "assetName"'); update "master_packs".list SET "assetName" = "IMEI"::bigint where battery_pack_number = "assetName"; -- deallocate update "master_packs".list SET "assetName" = "battery_pack_number" where "serialNumber" = "IMEI"::bigint; -- allocate end; $BODY$; -- "master_packs".list("IMEI") is true and length("IMEI") = 15; -- INSERT INTO "master_packs".list("serialNumber","assetName") VALUES(("IMEI" :: bigint) , "battery_pack_number") CALL "master_packs".newprocCheckUpdateAdd('112233', 'b12345566'); SELECT * FROM "master_packs".list ORDER BY "serialNumber" ASC;
при вызове процедуры я получаю ошибку. Пожалуйста, Посоветуйте.
Комментарии:
1. Вы используете Postgresql или Oracle (plsql)?
2. Я использую Postgresql.
3. Просто укажите аргумент, содержащий значение для каждого заполнителя в строке формата.
4. Примечание:
"IMEI"
и"assetName"
не имеет смысла вVALUES
предложении, так как нет строки, из которой можно было бы взять столбцы.5. таким образом, данные должны быть переданы из файла .csv, в котором было 2 столбца (imei, имя актива), но мастер-пакет на нашем сервере содержит пару столбцов «Серийный номер»,»Тип упаковки»,»штрих-код»,»Собственный номер»,»Созданный»,»Обновленный»,»Имя актива»,»Тег актива», где серийный номер = imei и имя актива = номер батарейного пакета