Funkcja w MariaDB 5.5

0

Cześć,
Wiecie może co robię nie tak przy tworzeniu funkcji na MariaDB 5.5?

create or replace function check_read(in_param varchar(10),
                                      in_sensor varchar(10)) returns decimal(6, 2) deterministic
begin
  declare ret decimal(6, 2);
  select val into ret from sensors where param = in_param and sensor = in_sensor;
  return ret;
end;

Dostaję błąd:

[HY000][1419] (conn=547) You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

a jak próbuję bez deterministic:

[2020-09-05 12:30:04] [42000][1064] (conn=547) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'function check_read(in_param varchar(10),
[2020-09-05 12:30:04] [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'function check_read(in_param varchar(10),
[2020-09-05 12:30:04] ' at line 1

Z góry dziękuję

0

Tu masz ładne wytłumaczenie: https://stackoverflow.com/a/56390000

0

Ustawienie log_bin_trust_function_creators na 1 zmieniło jedynie problem z [HY000][1419] ale jest teraz ten drugi błąd...

1

Nie wiem jak na MariaDB 5.5 ale na 10.3 działa. https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=764f5071a1967668557fdef2aab3642d

0

chcesz szkielet działającej funkcji ?

DELIMITER //
CREATE FUNCTION ZmienWybranyTekst(id int) -- nazwa funkcji wraz z argumentem który podajesz w wywołaniu
RETURNS int DETERMINISTIC READS SQL DATA
    BEGIN 
       
        SET WstawianieWartosci2=(rpad(mid(WstawianieWartosci,1,char_length(WstawianieWartosci)),char_length(WstawianieWartosci)+1,'_'));
        SET PoZmianie=(REGEXP_replace(DoZmiany,'\\S*\\b\\D*[^\\d\\/]\\b\\d[^\\/]\\d{1,4} |^\\S*\\b\\D*[^\\d\\/ ]\\b ',WstawianieWartosci2));
        UPDATE `tabela2` SET `pAdres`=PoZmianie WHERE `pID`=id; -- te zapytanie musisz dostosować do swojej tabeli

        RETURN 0; 
    END; //
DELIMITER ;

Tylko nie pamiętam co, gdzie i jak oraz nie mam linka skąd ten wzorek wziąłem ale powinno działać

1 użytkowników online, w tym zalogowanych: 0, gości: 1