-1

データベース内に複数のものが存在するかどうかをテストするストアド関数を作成しようとしています。少なくとも1つ存在する場合はfalse、存在しない場合はtrueのブールステートメントを返します。

具体的には、BurgerOrder、Patties、Buns という複数のテーブルに参加しています。

BurgerOrder テーブルには、PattyID (ハンバーガーの肉) と BunID (パンの種類) が含まれています。ハンバーガーにはパティが 2 枚入っていることに注意してください。これが私が試したことです。

DELIMITER //

CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC

BEGIN 
    DECLARE Result VARCHAR(5);

    IF BunCode NOT IN (SELECT B.ID 
                        FROM BurgerOrder BO JOIN Patties P JOIN Buns B 
                        ON B.ID = BO.BunID AND P.ID = B.PattyID 
                        WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or 'Beef') 
                        THEN SET Result = TRUE;

    ELSE SET Result = FALSE;

    END IF;

    RETURN Result;

END //

DELIMITER ;

よくわからないことがいくつかあります。ブール型のデータ型が見つからなかったため、VARCHAR(5) が返されます。現在、true または false として 1 または 0 を返します。

第二に、この機能は実際にテストしたところ、1 つのエラーで問題なく動作しているように見えると思います。

エラー コード: 1292。切り捨てられた不正な DOUBLE 値: 'Beef'

ビーフ、チキン、またはサワードウ パンのいずれかがテスト対象の特定のバーガー オーダーに含まれている場合に、関数が True を返すようにしたいと考えています。しかし、問題の原因は、私が入ったハンバーガーにビーフパティが2つ入っていることだと思います. 上記の関数を実行すると、正常に動作します。関数 (EG Select PattyTest(23)) を呼び出したときにのみ、エラー コード 1292 が表示されます。

奇妙なことに、SQL はエラー メッセージを 1 回表示した後、引き続き正常に動作し、正しい結果を返します。

どんな助けでも大歓迎です!

4

3 に答える 3