MySQL trigger before insert, numery faktur

Rozwiązanie proste, ale wymagał jednej zmiany w konfiguracji my.cnf, dokładniej thread_stack bo wartość 64K to deko mało. Całość bazuje na założeniu, że numer faktury to ROK/NUMER, gdzie numer jest autoinkrementowaną wartością. Tablica t_faktury, w której numer faktury jest reprezentowany za pomocą pola fvat_no trigger dla niej i procedura poniżej: DROP TRIGGER IF EXISTS fvat_number; DROP PROCEDURE IF EXISTS generuj_fvatno; DELIMITER $$ CREATE PROCEDURE generuj_fvatno(out numerek VARCHAR(30)) BEGIN SELECT CONCAT(DATE_FORMAT(CURDATE(), '%Y'),'/',COUNT(fvat_no) + 1) INTO numerek FROM t_faktury WHERE SUBSTRING_INDEX(fvat_no, '/', 1) = DATE_FORMAT(CURDATE(), '%Y') LIMIT 1 ; END$$ CREATE TRIGGER fvat_number BEFORE INSERT ON t_faktury FOR EACH ROW BEGIN CALL generuj_fvatno(@out); IF @out = NULL THEN SET NEW.fvat_no = CONCAT(DATE_FORMAT(CURDATE(), '%Y'),'/', 1); ELSE SET NEW.fvat_no = @out; END IF; END$$

marca 20, 2010 · paramah

Dynamic Asterisk na PostgreSQL (cz.1)

Ostatnio a dokładniej w piątek postawiono mi zadanie stworzenie zupełnie dynamicznego rozwiązania dla platformy Asterisk (osobiście polecam ostatnią stabilną wersję o numerku 1.4.23.1). Stworzenie konfiguracji dla składownia CDR’ów w psql nie jest problemem, jednak kiedy chcemy mieć klientów sip, iax “tworzyć” zupełnie dynamicznie bez potrzeby restartowania serwera lub modułów jest to deko problem. Łącząc Asteriska z bazą danym mamy aktualnie parę możliwych sterowników baz danych: ODBCM mysql pgsql Chcąc mieć bazę jak najbardziej jak to nazywam “strict” oraz mieć ją zupełnie za darmo stwierdziłem, że idealny będzie pgsql. Wstępna konfiguracja danych potrzebnych do połączenia z bazą danych znajdują się w /etc/asterisk/res_pgsql.conf: ...

marca 7, 2009 · paramah

Przydatne SQL’e

Poniżej dla potomoności, parę przydatnych funkcji w MySQL służących do oblicznia danych sieciowych: DROP FUNCTION IF EXISTS check_network; DROP FUNCTION IF EXISTS get_network; DROP FUNCTION IF EXISTS get_broadcast; delimiter | CREATE FUNCTION check_network(ip1 VARCHAR(25), ip_netmask VARCHAR(25), ip2 VARCHAR(25)) RETURNS INT DETERMINISTIC BEGIN IF((INET_ATON(ip2) & INET_ATON(ip_netmask)) = (INET_ATON(ip1) & INET_ATON(ip_netmask))) THEN RETURN 1; ELSE RETURN 0; END IF; END| CREATE FUNCTION get_network(ip1 VARCHAR(25), ip_netmask VARCHAR(25)) RETURNS VARCHAR(20) DETERMINISTIC BEGIN RETURN INET_ATON(ip1) & INET_ATON(ip_netmask); END| CREATE FUNCTION get_broadcast(ip1 VARCHAR(25), ip_netmask VARCHAR(25)) RETURNS VARCHAR(20) DETERMINISTIC BEGIN RETURN INET_NTOA(INET_ATON(ip1) + (INET_ATON('255.255.255.255') - INET_ATON(ip_netmask))); END| delimiter ;

października 23, 2007 · paramah