powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите: column reference "firm_id" is ambiguous
8 сообщений из 8, страница 1 из 1
Помогите: column reference "firm_id" is ambiguous
    #39879264
Фотография Cola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть процедура, в одном случае она создает запись в БД, в другом изменяет запись.
В первом случае - все ОК.
А вот при изменении возникает ошибка "column reference "firm_id" is ambiguous"
Если серверу не нравится что имена переменных и имена полей совпадают, то почему тогда работает первый случай? Как-то очень странно. Что посоветуете? Всем за ранее благодарна!
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
CREATE OR REPLACE FUNCTION public.new_operation(
	auser_master_id integer,
	account_id integer,
	firm_id integer,
	user_id integer,
	id_kassa integer,
	id_simple_operation integer,
	typ_operation_id integer,
	id_contract integer,
	aoper_data timestamp with time zone,
	sum numeric,
	approved integer,
	coment character varying,
	sum1 numeric,
	id_project integer,
	tag character varying,
	id_partner integer,
	api integer,
	id_curency numeric,
	partner_id integer,
	id_sens_operation integer,
	id_opp integer)
    RETURNS text
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
DECLARE 
  tt INTEGER; --результат работы все процедуры
  typ_kassa_id INTEGER; --id типа счета касса или расчетный счет
  idd INTEGER; --id счета в плане счетов касса или расчетный счет
  idoper INTEGER; --id добавленной операции
  dd character varying;
  sens_operation INTEGER;
  
BEGIN
------------создание новой записи-----------------------------------------
 IF api=1 THEN  
  INSERT INTO operation("user_master_id","account_id","firm_id","user_id","id_kassa","id_simple_operation",
   "typ_operation_id","id_contract",
   "oper_data","sum","approved","Coment","sum1",
   "id_project","Tag","id_partner"
   )
  VALUES (auser_master_id ,account_id ,firm_id ,user_id ,id_kassa ,id_simple_operation ,
    typ_operation_id ,id_contract ,
    aoper_data ,sum ,approved ,Coment ,sum1 ,
    id_project , Tag, id_partner
   ) RETURNING id into idoper;
   dd=1;
 END IF;
----------Изменение записи---ОШИБКА ТУТ: firm_id="firm_id"------------------------------------------
 IF api=4 THEN  
  UPDATE operation SET "user_master_id"=auser_master_id, firm_id="firm_id",
  "user_id"=user_id, "id_kassa"=id_kassa, "id_simple_operation"=id_simple_operation,
   "typ_operation_id"=typ_operation_id, "id_contract"=id_contract,
   oper_data="aoper_data", sum="sum", approved="approved", "Coment"=Coment, "sum1"=sum1,
   "id_project"=id_project,"Tag"=Tag,"id_partner"=id_partner
    WHERE id = id_opp;
   dd=4;
 END IF;
-------------------------------------------------------------------------------------------------------- 
  RETURN dd; --результат завершения операции (успех или ошибка)
END;
$BODY$;
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39879297
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что при insert очевидно что вы не обращаетесь к полю таблицы.
при update - уже неочевидно, хотите вы сделать бессмысленное но полностью допустимое присвоение полю его же собственного значения либо подразумеваете использование переменной. Догадаться можно, но это не задача СУБД угадывать что хотели сделать.
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39879313
Фотография Cola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть единственный выход это переименование переменных?
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39879325
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ColaТо есть единственный выход это переименование переменных?
Не единственный .
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39879360
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не хотел отвечать, так как ответ очевидный. Но раз никто не хочет, то приходится указать на использование двойных кавычек. В котором ошибка.
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39879401
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ColaТо есть единственный выход это переименование переменных?

единственный выход - понимать, что написано, разница есть?

UPDATE operation SET "user_master_id"=auser_master_id, firm_id="firm_id",
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39880935
Фотография Cola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увидела свою ошибку - невнимательность. Спасибо. Но все равно не заработало, пришлось менять названия переменных.
Поменяла - работает. Спасибо.
...
Рейтинг: 0 / 0
Помогите: column reference "firm_id" is ambiguous
    #39882515
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cola,

При разработке у нас к именованию переменных применяются ряд правил, которые помогают избавится от подобных ошибок, которые порой не проявляются не сразу, что очень обидно.
[Префикс типа переменно примерно так ][v для локальных переменных, p для параметров, или пусто если это поле таблицы][Смысловая часть]. т.е. с вашим случаем было бы idpFirm.
Код: plsql
1.
UPDATE operation SET firm_id=idpFirm

-так понятнее откуда пришли переменные
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите: column reference "firm_id" is ambiguous
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]