Funkcja w MariaDB 5.5

Funkcja w MariaDB 5.5
Mikolaj Pydzik
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

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

Kopiuj
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:

Kopiuj
[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:

Kopiuj
[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ę

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
0

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

Mikolaj Pydzik
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

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

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
1
Mikolaj Pydzik
Na MySQL 5.5 jest identyczny błąd, a niestety na ten silnik jestem niejako skazany bo na serwerze Qnap niestety nie dali 10.3...
ZK
  • Rejestracja:około 19 lat
  • Ostatnio:4 miesiące
0

chcesz szkielet działającej funkcji ?

Kopiuj
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ć


bla
edytowany 1x, ostatnio: zkubinski

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.