2017-08-31 87 views
-2

我有一個問題,這樣的查詢:#2014 - 指令不同步;你現在不能運行這個命令;使用函數

SELECT func_total_facturas_cliente(cli_codigo,2,"no") AS totalCreditos 
FROM cliente 

的功能是這樣的:

BEGIN 
    declare totalAbonos double; 

    declare total cursor for 
     SELECT SUM(faca_abono) FROM abono_facturacredito_ventas 
     WHERE cli_codigo = cliCodigo COLLATE latin1_general_ci; 

    OPEN total; 
     FETCH total INTO totalAbonos; 
    CLOSE total; 

    RETURN totalAbonos; 
END 

的具體問題是,它跳過只有當它在phpMyAdmin的運行錯誤服務器,我如何改進查詢或功能來糾正錯誤?

在此先感謝。

+0

問題中英文,請在本網站。 – RiggsFolly

+0

好的,謝謝。你已經可以用英文閱讀了,現在 – mrangel17

+0

@ mrangel17你和我來自同一個城鎮:)。關於你的問題:你不需要光標。你可以簡單地從abono_facturacredito_ventas WHERE cli_codigo = cliCodigo'中選擇@totalAbonos = SUM(faca_abono)。這就夠了。 – Icarus

回答

0

這裏有一個SQL的小提琴,這將有助於你:

https://www.db-fiddle.com/f/jrwvJHt2PYLsXbhqWVW9FC/1

我將它拷貝到這裏還有:

create table abono_facturacredito_ventas 
(
    faca_abono double, 
    cli_codigo nvarchar(50) 
); 

create table clientes 
(
cli_codigo nvarchar(30), 
nombre nvarchar(20) 
); 

現在插入一些測試數據:

insert into abono_facturacredito_ventas (faca_abono, cli_codigo) values (31,'abc'); 
insert into abono_facturacredito_ventas(faca_abono, cli_codigo) values (3,'abc'); 
insert into abono_facturacredito_ventas(faca_abono, cli_codigo) values (32,'abc'); 
insert into abono_facturacredito_ventas(faca_abono, cli_codigo) values (34,'xyxz'); 


insert into clientes (cli_codigo, nombre) values ('abc','Ricardo'); 
insert into clientes (cli_codigo, nombre) values ('xyxz','Caro'); 

現在聲明函數(注意:我的語法在我留給你的評論中是錯誤的):

CREATE FUNCTION func_total_facturas_cliente(codigo nvarchar(50)) RETURNS double 
    DETERMINISTIC 
BEGIN 

    select SUM(faca_abono) into @totalAbonos from abono_facturacredito_ventas WHERE cli_codigo = codigo; 

    return @totalAbonos; 
END 

現在用它作爲這樣:

select func_total_facturas_cliente(cli_codigo) as total_abonos, nombre from clientes ; 
+0

您的回覆非常有幫助,我能解決我的問題,非常感謝 – mrangel17

相關問題