API банка <> СУБД

Трёп, флуд, флейм здесь. Реклама, спам и пропаганда наркотиков НЕ приветствуются.
Аватара пользователя
Yuriy
Сообщения: 138
Зарегистрирован: 11 фев 2018, 13:34
Откуда: Киев

API банка <> СУБД

Сообщение Yuriy » 31 мар 2020, 10:54

Здравствуйте!
Подскажите есть ли механизм реализации взаимодействия СУБД с API банка напрямую без привлечения клиентской стороны.
Конкретно: запись в таблицу СУБД курса валют.
:-[

Аватара пользователя
Владимир
Администратор
Сообщения: 658
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

API банка <> СУБД

Сообщение Владимир » 31 мар 2020, 12:23

Не совсем понятен вопрос. Как таковой механизм может возникнуть при наличии API конкретного банка.

Аватара пользователя
Yuriy
Сообщения: 138
Зарегистрирован: 11 фев 2018, 13:34
Откуда: Киев

API банка <> СУБД

Сообщение Yuriy » 31 мар 2020, 12:57

C API банка понятно. Как из СУБД (PostgreSQL) сделать запрос?

Аватара пользователя
Владимир
Администратор
Сообщения: 658
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

API банка <> СУБД

Сообщение Владимир » 31 мар 2020, 14:09

Вопрос стал еще менее понятен...

Аватара пользователя
alador
Сообщения: 54
Зарегистрирован: 14 фев 2018, 17:53

API банка <> СУБД

Сообщение alador » 06 апр 2020, 10:22

Сама СУБД не может делать запросы, это может делать какой-нибудь скрипт, который будет запускаться по таймеру кроном в линукс среде или виндовс через планировщик, и по результатам опроса записывающий в заданную базу полученное значение.

Аватара пользователя
Владимир
Администратор
Сообщения: 658
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

API банка <> СУБД

Сообщение Владимир » 06 апр 2020, 13:55

Cама-то СУБД в принципе может выполнить внешний http-запрос через pg_curl по заданию через pg_task. Однако остались "за кадром" подробности вопроса и можно полжизни думать-гадать над
"с API банка напрямую без привлечения клиентской стороны."
и
"C API банка понятно."

Аватара пользователя
Yuriy
Сообщения: 138
Зарегистрирован: 11 фев 2018, 13:34
Откуда: Киев

API банка <> СУБД

Сообщение Yuriy » 06 апр 2020, 16:36

Спасибо за ответы alador и Владимир.
:book:

Аватара пользователя
Amney
Сообщения: 3
Зарегистрирован: 04 апр 2020, 13:58
Откуда: Вечность
Контактная информация:

API банка <> СУБД

Сообщение Amney » 27 апр 2020, 18:33

Yuriy писал(а):
06 апр 2020, 16:36
Спасибо за ответы alador и Владимир.
:book:
Решили вопрос?

Аватара пользователя
Yuriy
Сообщения: 138
Зарегистрирован: 11 фев 2018, 13:34
Откуда: Киев

API банка <> СУБД

Сообщение Yuriy » 28 апр 2020, 19:13

Amney писал(а):
27 апр 2020, 18:33
Решили вопрос?
Не стал жестко цеплять цены к банку. Вывел текущие курсы на страницу владельца, дальше по его решению на стороне СУБД пересчет цен. Но впереди привязка остатков к сайтам оптовиков, вот там буду делать жесткую привязку. :vava:
СтраницаПоказать
Screenshot_1.png
Screenshot_1.png (95.65 КБ) 560 просмотров
ТриггерПоказать

Код: Выделить всё

CREATE TRIGGER t_upd_price_currency
    BEFORE UPDATE OF price_currency
    ON public.a_currency
    FOR EACH ROW
    EXECUTE PROCEDURE public.f_upd_currency();
ФункцияПоказать

Код: Выделить всё

DECLARE

	-- Table: public.a_currency
	var_name_currency  character varying(4);
	var_price_currency numeric(6,4);
	
	-- FUNCTION: public.f_upd_currency()
	var_id_f                 integer;
	var_price_currency_f     numeric(9,2);
	var_old_price_currency_f numeric(9,2);
	var_price_f          	   numeric(9,2);
	var_old_price_f          numeric(9,2);
	
	-- Объявляем курсорные переменные обоев
	cursor_wallpaper CURSOR FOR SELECT id_wallpaper, price_currency_wallpaper, old_price_currency_wallpaper
					      		FROM   a_wallpaper 
					      		WHERE  currency_wallpaper = var_name_currency
					      	  ORDER BY id_wallpaper ASC;
	
	-- Объявляем курсорные переменные освещения
	cursor_lighting CURSOR FOR SELECT id_lighting, price_currency_lighting, old_price_currency_lighting
					      		FROM   a_lighting 
					      		WHERE  currency_lighting = var_name_currency
					      	  ORDER BY id_lighting ASC;
							  
	-- Объявляем курсорные переменные декора
	cursor_decor CURSOR FOR SELECT id_decor, price_currency_decor, old_price_currency_decor
					      	FROM   a_decor 
					      	WHERE  currency_decor = var_name_currency
					      	ORDER BY id_decor ASC;
							  
	-- Объявляем курсорные переменные клея
	cursor_glue CURSOR FOR SELECT id_glue, price_currency_glue, old_price_currency_glue
					      	FROM   a_glue 
					      	WHERE  currency_glue = var_name_currency
					      	ORDER BY id_glue ASC;							  
	
BEGIN

-- РЕДАКТИРОВАНИЕ	
	IF TG_OP = 'UPDATE' THEN -- редактирование записи

		var_name_currency  = NEW.name_currency;
		var_price_currency = NEW.price_currency;
			
		-- Открываем курсор обоев
		OPEN cursor_wallpaper;
			-- начало цикла выборки из курсора обоев	
			LOOP 

				FETCH cursor_wallpaper INTO var_id_f, var_price_currency_f, var_old_price_currency_f;
				
					--если такого нет, то мы выходим
					IF NOT FOUND THEN 
						EXIT;
					END IF;
				
					var_price_f = var_price_currency_f * var_price_currency;
					var_old_price_f = var_old_price_currency_f * var_price_currency;
					
					-- обновляем цену обоев
					UPDATE a_wallpaper
					SET    price_wallpaper = var_price_f, old_price_wallpaper = var_old_price_f
					WHERE  id_wallpaper = var_id_f;

			-- конец цикла выборки из курсора обоев
			END LOOP; 
		-- закрываем курсор обоев
		CLOSE cursor_wallpaper; 
		
		-- Открываем курсор освещения
		OPEN cursor_lighting;
			-- начало цикла выборки из курсора освещения	
			LOOP 

				FETCH cursor_lighting INTO var_id_f, var_price_currency_f, var_old_price_currency_f;
				
					--если такого нет, то мы выходим
					IF NOT FOUND THEN 
						EXIT;
					END IF;
				
					var_price_f = var_price_currency_f * var_price_currency;
					var_old_price_f = var_old_price_currency_f * var_price_currency;
					
					-- обновляем цену освещения
					UPDATE a_lighting
					SET    price_lighting = var_price_f, old_price_lighting = var_old_price_f
					WHERE  id_lighting = var_id_f;

			-- конец цикла выборки из курсора освещения
			END LOOP; 
		-- закрываем курсор освещения
		CLOSE cursor_lighting;
		
		-- Открываем курсор декора
		OPEN cursor_decor;
			-- начало цикла выборки из курсора декора	
			LOOP 

				FETCH cursor_decor INTO var_id_f, var_price_currency_f, var_old_price_currency_f;
				
					--если такого нет, то мы выходим
					IF NOT FOUND THEN 
						EXIT;
					END IF;
				
					var_price_f = var_price_currency_f * var_price_currency;
					var_old_price_f = var_old_price_currency_f * var_price_currency;
					
					-- обновляем цену декора
					UPDATE a_decor
					SET    price_decor = var_price_f, old_price_decor = var_old_price_f
					WHERE  id_decor = var_id_f;

			-- конец цикла выборки из курсора декора
			END LOOP; 
		-- закрываем курсор декора
		CLOSE cursor_decor;
		
		-- Открываем курсор клея
		OPEN cursor_glue;
			-- начало цикла выборки из курсора клея	
			LOOP 

				FETCH cursor_glue INTO var_id_f, var_price_currency_f, var_old_price_currency_f;
				
					--если такого нет, то мы выходим
					IF NOT FOUND THEN 
						EXIT;
					END IF;
				
					var_price_f = var_price_currency_f * var_price_currency;
					var_old_price_f = var_old_price_currency_f * var_price_currency;
					
					-- обновляем цену клея
					UPDATE a_glue
					SET    price_glue = var_price_f, old_price_glue = var_old_price_f
					WHERE  id_glue = var_id_f;

			-- конец цикла выборки из курсора клея
			END LOOP; 
		-- закрываем курсор клея
		CLOSE cursor_glue;		

		RETURN NEW;

	END IF; 
END;

Ответить