MSQL budowanie funkcji - błąd w budowie?

0

Cześć wszystkim, walcze z problemem #1064 - Something is wrong in your syntax obok '@status VARCHAR, @data DATE) RETURNS INT AS BEGIN

Oto funkcja:

CREATE FUNCTION suma(@status VARCHAR, @data DATE) RETURNS INT AS BEGIN
    DECLARE
        @suma_zyskow FLOAT; DECLARE @suma_kosztow FLOAT;
    SELECT
        SUM(wartoscUmowy)
    FROM
        `tbl_agreement`
    WHERE
        `stat` = @status AND `data_wyjazdu` LIKE @data;
    SELECT
        SUM(hurtowa_cena_brutto)
    INTO `suma_kosztow`
FROM
    tbl_product
WHERE
    `idprodukt` IN(
    SELECT
        product_id
    FROM
        tbl_agreement_product
    WHERE
        `numer_umowy` IN(
        SELECT
            id
        FROM
            `tbl_agreement`
        WHERE
            `stat` = @status AND `data_wyjazdu` LIKE @data
    )
);
SET
    `wynik` = (@suma_zyskow - @suma_kosztow); RETURN wynik;
END

Przeczytałem masę przykładowych funkcji dla Mysql i nie widzę błedu składni, próbowałem z 'DECLARE' ustawiac nazwy wynikow zapytań w ciele funkcji itp. zawsze to samo

0

A na cholerę ci te małpy?

0
Marcin.Miga napisał(a):

A na cholerę ci te małpy?

tak było w przykładach, usunąłem nadal to samo:

CREATE FUNCTION suma(status VARCHAR, data DATE) RETURNS INT AS BEGIN
    DECLARE
        suma_zyskow FLOAT; DECLARE suma_kosztow FLOAT;
    SELECT
        SUM(wartoscUmowy)
    FROM
        `tbl_agreement`
    WHERE
        `stat` = status AND `data_wyjazdu` LIKE data;
    SELECT
        SUM(hurtowa_cena_brutto)
    INTO `suma_kosztow`
FROM
    tbl_product
WHERE
    `idprodukt` IN(
    SELECT
        product_id
    FROM
        tbl_agreement_product
    WHERE
        `numer_umowy` IN(
        SELECT
            id
        FROM
            `tbl_agreement`
        WHERE
            `stat` = status AND `data_wyjazdu` LIKE data
    )
);
SET
    `wynik` = (suma_zyskow - suma_kosztow); RETURN wynik;
END
0

To AS jest powodem błędu który cytowałeś.

I tak przy okazji:
czemu ma służyć pierwszy SELECT?

SELECT
        SUM(wartoscUmowy)
    FROM
        `tbl_agreement`
    WHERE
        `stat` = status AND `data_wyjazdu` LIKE data;

Ps. Popraw temat wątku.

0
hipekk napisał(a):

To AS jest powodem błędu który cytowałeś.

I tak przy okazji:
czemu ma służyć pierwszy SELECT?

SELECT
        SUM(wartoscUmowy)
    FROM
        `tbl_agreement`
    WHERE
        `stat` = status AND `data_wyjazdu` LIKE data;

Ps. Popraw temat wątku.

Niestety nic to nie zmieniło poprawiłem zastosowanie pierwszego selecta:

CREATE FUNCTION suma(status VARCHAR, data DATE) RETURNS INT BEGIN
    DECLARE
        suma_zyskow FLOAT; DECLARE suma_kosztow FLOAT;
    SELECT
        SUM(wartoscUmowy) INTO suma_zyskow
    FROM
        `tbl_agreement`
    WHERE
        `stat` = status AND `data_wyjazdu` LIKE data;
    SELECT
        SUM(hurtowa_cena_brutto)
    INTO suma_kosztow
FROM
    tbl_product
WHERE
    `idprodukt` IN(
    SELECT
        product_id
    FROM
        tbl_agreement_product
    WHERE
        `numer_umowy` IN(
        SELECT
            id
        FROM
            `tbl_agreement`
        WHERE
            `stat` = status AND `data_wyjazdu` LIKE data
    )
);
SET
    `wynik` = (suma_zyskow - suma_kosztow); RETURN wynik;
END
0

Podaj długość zmiennej status .

0

@hipekk:
Pojawił się kolejny problem teraz w deklaracjach

CREATE FUNCTION suma(status VARCHAR(50), data DATE) RETURNS INT BEGIN
    DECLARE suma_zyskow FLOAT;
    DECLARE suma_kosztow FLOAT;
    SELECT
        SUM(wartoscUmowy) INTO suma_zyskow
    FROM
        `tbl_agreement`
    WHERE
        `stat` = status AND `data_wyjazdu` LIKE data;
    SELECT
        SUM(hurtowa_cena_brutto)
    INTO suma_kosztow
FROM
    tbl_product
WHERE
    `idprodukt` IN(
    SELECT
        product_id
    FROM
        tbl_agreement_product
    WHERE
        `numer_umowy` IN(
        SELECT
            id
        FROM
            `tbl_agreement`
        WHERE
            `stat` = status AND `data_wyjazdu` LIKE data
    )
);
SET
    `wynik` = (suma_zyskow - suma_kosztow); RETURN wynik;
END

BŁĄD: #1064 - Something is wrong in your syntax obok '' w linii 2

0

U mnie tego błędu nie ma, ale chodzi pewnie o edytor którego używamy.

Może chodzić o DELIMITER.
https://www.mysqltutorial.org/mysql-stored-procedure/mysql-delimiter/

0

@hipekk:
UWAGA nowa wersja i nowy błąd:

CREATE FUNCTION suma(status VARCHAR(50), data DATE) RETURNS INT BEGIN
    
    SET @suma_zyskow = (SELECT SUM(wartoscUmowy) FROM `tbl_agreement` WHERE `stat` = status AND `data_wyjazdu` LIKE data)
        
    SET @suma_kosztow =(SELECT
        SUM(hurtowa_cena_brutto) FROM tbl_product WHERE `idprodukt` IN(
  			  SELECT product_id FROM tbl_agreement_product WHERE`numer_umowy` IN(
       				 SELECT id FROM `tbl_agreement` WHERE `stat` = status AND `data_wyjazdu` LIKE data)))

SET `wynik` = (@suma_zyskow - @suma_kosztow);
RETURN wynik;
END
#1064 - Something is wrong in your syntax obok 'SET @suma_kosztow =(SELECT
        SUM(hurtowa_cena_brutto) FROM tbl_product...' w linii 5
0

Kombinuj trochę sam...

Co to jest wynik?

2

Odszedłem od komputera, więc trochę po omacku - Brakuje średnika za pierwszym przypisaniem.

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