0

MySQL データベースにクエリを実行しようとしています。データベースに整数として格納されているフィールドは、期待どおりの整数として返されます。ストアド プロシージャで計算された値がある場合、数値が 0 または 1 になることを保証できる場合でも、常に longlong として返されます。

計算フィールドの結果が引き続き int として返されるようにする方法が必要です。

興味深いことに、ビューで計算を行ってからそのビューにクエリを実行すると、問題が解決するように見えますが、パフォーマンスが大幅に低下します。

編集

私が使用しようとしている種類の手順の例は次のとおりです。

DELIMITER //
    CREATE PROCEDURE getProjectFinance(IN projectID varchar(30)) 
    BEGIN 
            SELECT  p.projectID as id,
                (Select sum(COALESCE(v.Cost, 0))
                    from variations v
                    where v.projectID = p.projectID) as total
            FROM Projects p
            WHERE p.projectID  = projectID;
    END//
DELIMITER ;

DELIMITER //
    CREATE PROCEDURE getAllProjectsFinance() 
    BEGIN 
            SELECT  p.projectID as id,
                (Select sum(COALESCE(v.Cost, 0))
                    from variations v
                    where v.projectID = p.projectID) as total
            FROM Projects p
    END//
DELIMITER ;

編集 2

問題を少し単純化しようとしました。次の SQL コマンドは、longlong (8 バイト) 型の単一フィールド (count) を持つレコードを返します。整数型(4バイト)にしたい

SELECT (Select 1) as count;

次のようにキャストを使用しても役に立ちません。

SELECT cast((Select 1) as signed integer) as count;
4

2 に答える 2

1

計算された値をキャストするとどうなりますか?

cast((
    Select sum(COALESCE(v.Cost, 0))
    from variations v
    where v.projectID = p.projectID
    ) 
    as integer
) as total
于 2012-09-19T11:06:18.973 に答える
0

CREATE FUNCTION name(parameter paramType, .... ) RETURNS returnType代わりにcreate procedure ...、関数の本体の最後に return 句を使用する必要があります。詳細については、ドキュメントの共通部分と機能固有の部分を参照してください。

于 2012-09-19T11:03:21.863 に答える