Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выполнение строки SQL в PostgreSQL / 7 сообщений из 7, страница 1 из 1
06.04.2018, 14:39
    #39626841
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
Здравствуйте! Как в PostgreSQL выполнить SQL строку?
P.S.
В MS SQL Server это можно выполнить так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @id_name VARCHAR(50);
DECLARE @table_name VARCHAR(50);

SET @id_name='ACTION_ID';
SET @table_name='ACTIONS_LOG'

EXEC ('SELECT MAX('+@id_name+') FROM '+@table_name+'');
...
Рейтинг: 0 / 0
06.04.2018, 15:08
    #39626854
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
ASukhov1986, Есть тут
http://www.sql.ru/forum/1282159/vyvesti-rezultat-zaprosa-iz-do?hl=prepare
, но мне хотелось сделать в функции:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION "METR"."restart_table"(table_name varchar(50), id_name varchar(50))
RETURNS VOID AS $$
DECLARE DSQL varchar(2000);
DECLARE Num int;
BEGIN
	 create table Temp(ID_Value int);
	 set DSQL = 'insert into Temp(ID_Value) select max('||id_name||')+1 from '||table_name;
	 --EXECUTE DSQL;<---Тут выполнение
	 set Num = (select ID_Value from Temp);
	 if (NUM is not null )
	 then
	 	 set DSQL = 'alter table '||table_name||' alter column '||id_name||' restart with '||cast(Num as char(10));
		 --EXECUTE DSQL;<---Тут выполнение
	 end if;
	 drop table Temp;
END;
$$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
06.04.2018, 15:14
    #39626857
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
Вот так функция создаётся без ошибок:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION "METR"."restart_table"(table_name varchar(50), id_name varchar(50))
RETURNS VOID AS $$
DECLARE DSQL varchar(2000);
DECLARE Num int;
BEGIN
	 create table Temp(ID_Value int);
	 DSQL = 'insert into Temp(ID_Value) select max('|| id_name ||')+1 from ' || table_name;
	 EXECUTE DSQL;
	 Num = (select ID_Value from Temp);
	 if (Num is not null )
	 then
	 	 DSQL = 'alter table '||table_name||' alter column '||id_name||' restart with '||cast(Num as char(10));
		 EXECUTE DSQL;
	 end if;
	 drop table Temp;
END;
$$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
06.04.2018, 17:00
    #39626929
Синий Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
Может проще использовать DO ?
...
Рейтинг: 0 / 0
10.04.2018, 08:52
    #39627746
ASukhov1986
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
Синий Слон,можно и так, но в системе эта логика реализована в функции
...
Рейтинг: 0 / 0
10.04.2018, 15:30
    #39627987
Ы2
Ы2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
ASukhov1986, а зачем таблицу создаете?
...
Рейтинг: 0 / 0
10.04.2018, 15:33
    #39627989
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение строки SQL в PostgreSQL
Ы2ASukhov1986, а зачем таблицу создаете?

не трогайте его. он мсскльный код тупо лопатит.

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


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