Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
27.06.2019, 16:42
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
итак я создаю функцию CREATE OR REPLACE FUNCTION public."go-a"( arg integer) RETURNS void LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ BEGIN UPDATE tablename SET a='0' WHERE "NUM"=arg; END; $BODY$; и все работает, когда я делаю DO $$ BEGIN PERFORM go(3); END $$; т.е значение записывается в нужную строку нужного столбца и все счастливы. и теперь я делаю абсолютли такую же функцию, которая отличается от первой только названием и количеством аргументов, т.е добавляется 2й аргумент, который даже не используется в теле функции CREATE OR REPLACE FUNCTION public.go( arg integer, td "char") RETURNS void LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$BEGIN UPDATE tablename SET a='0' WHERE "NUM"=arg; tr := td; END;$BODY$; делаю DO $$ BEGIN PERFORM go(3, a); END $$; и появляется ошибка: столбец 'a' не существует СТРОКА: go(3, a) ЗАПРОС: SELECT go(3, a) КОНТЕКСТ: функция PL/pgSQL inline_code_block, строка 1, оператор PERFORM ПОЧЕМУ ТАК ПРОИСХОДИТ? мне нужен второй аргумент, чтобы добавить условия сравнения с ним т.е вот так: CREATE OR REPLACE FUNCTION public.go( arg integer, td "char") RETURNS void LANGUAGE 'plpgsql' COST 100 VOLATILE AS $$ BEGIN IF td=a THEN UPDATE tablename SET a='0' WHERE "NUM"=arg; ELSEIF td=b THEN UPDATE tablename SET b='0' WHERE "NUM"=arg; ELSEIF td=c THEN UPDATE tablename SET c='0' WHERE "NUM"=arg; ELSE RAISE EXCEPTION 'no such td name. Use a, b or c'; END IF; END; $$; сначала я думала что условия не правильно пишу или сравниваю не так, но удалила все лишнее и все равно такое происходит ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 16:47
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
tr := td; на эту строку не обращайте внимание, ее там не должно быть, т.е функция такая как написано, только без этой строки ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 17:04
|
|||
---|---|---|---|
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
heipit, так если хотите передать строковой литерал - как строковой литерал его и оформите. select func(fieldname) from tablename - это корректный запрос, вызывающий func и передающий fieldname. Именно поэтому запрос select func(fieldname); не может быть выполнен. Что такое fieldname и откуда берётся парсер не знает. Втихую считать его строкой - мысль ужасная. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 17:18
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
не поняла, если вы имеете в виду что нужно делать так: select go(3, "a") from tavlename; то это тоже не работает, та же самая ошибка появляется ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:02
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
У Вас второй аргумент это некое значение или наименование столбца? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:04
|
|||
---|---|---|---|
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
heipit, вместо Код: sql 1.
выполните Код: sql 1.
or, na hudoi konets Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:04
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
Guzya, это наименование столбца, в виде символа ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:07
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
потому что как я поняла нельзя выбрать столбец по переданному параметру в функцию ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:08
|
|||
---|---|---|---|
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
heipitGuzya, это наименование столбца, в виде символа ооо , тады втыкать в Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:11
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
qwwq, спасибо огромнейшее, помогло! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:14
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
Сам только изучаю postgres, есть подозрение, что тип у второй переменной должен быть соответствующим (не просто char). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.06.2019, 18:20
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
qwwq, авторооо , тады втыкать в DO $$ BEGIN ... a := ...; execute 'select go(3,'||quote_ident( a)||' )'; --dynamo .... END $$; вот это не поняла что такое, может я не правильно описала, я имела в виду, что нужно второй аргумент влияет на то, в какой столбец будет вставляться значение, т.е так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.06.2019, 10:25
|
|||
---|---|---|---|
|
|||
начала изучать Postgresql и plpgSQL, проблема с созданием функции |
|||
#18+
heipitитак я создаю функцию CREATE OR REPLACE FUNCTION public."go-a"( arg integer) RETURNS void LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ BEGIN UPDATE tablename SET a='0' WHERE "NUM"=arg; END; $BODY$; и все работает, когда я делаю DO $$ BEGIN PERFORM go(3); END $$; т.е значение записывается в нужную строку нужного столбца и все счастливы. Итак: 1. создается функция public."go-a" 2. PERFORM go(3) 3. что такое счастье?(ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&tablet=1&tid=1995142]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 424ms |
0 / 0 |