|
начала изучать 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:42 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
tr := td; на эту строку не обращайте внимание, ее там не должно быть, т.е функция такая как написано, только без этой строки ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 16:47 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
heipit, так если хотите передать строковой литерал - как строковой литерал его и оформите. select func(fieldname) from tablename - это корректный запрос, вызывающий func и передающий fieldname. Именно поэтому запрос select func(fieldname); не может быть выполнен. Что такое fieldname и откуда берётся парсер не знает. Втихую считать его строкой - мысль ужасная. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 17:04 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
не поняла, если вы имеете в виду что нужно делать так: select go(3, "a") from tavlename; то это тоже не работает, та же самая ошибка появляется ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 17:18 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
У Вас второй аргумент это некое значение или наименование столбца? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:02 |
|
начала изучать 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:04 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
потому что как я поняла нельзя выбрать столбец по переданному параметру в функцию ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:07 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
heipitGuzya, это наименование столбца, в виде символа ооо , тады втыкать в Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:08 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
qwwq, спасибо огромнейшее, помогло! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:11 |
|
начала изучать Postgresql и plpgSQL, проблема с созданием функции
|
|||
---|---|---|---|
#18+
Сам только изучаю postgres, есть подозрение, что тип у второй переменной должен быть соответствующим (не просто char). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:14 |
|
начала изучать 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2019, 18:20 |
|
начала изучать 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. что такое счастье?(ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 10:25 |
|
|
start [/forum/topic.php?fid=53&msg=39831293&tid=1995142]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 448ms |
0 / 0 |