2011-08-13 12 views
1

私はストアドプロシージャの変数がMySQLで期待値を返さないのですか?

create procedure create_view (IN t varchar(50)) 
BEGIN 
    prepare stmt from 'select @cnt= count(weight) from test where url = ?;'; 
    execute stmt using @t; 
    set @base = @cnt /4; 
    set @offset = @cnt/2; 
    set @query = concat('create or replace view view_by_url as select url, weight from test where url = ',@t,' order by weight limit ',@base,' , ',@offset,' ;'); 
    select t as 'param'; 
    select cnt as 'count'; 
    select @base as 'base'; 
    select @offset as 'offset'; 
    select @query as 'query'; 
-- prepare stmt from @query; 
-- execute stmt ; 
END; 
call create_view('a'); 

そして@t返す「」結果に設定されたが、@cnt、@Baseと@offsetにはない、このコードをデバッグしています。そしてなぜ私は自分自身を説明することはできません。助けてもらえますか?

答えて

1

は、ストアドプロシージャの最後にSELECT単一試してみてください:

SELECT 
     t as 'param', 
     @cnt as 'count', 
     @base as 'base', 
     @offset as 'offset', 
     @query as 'query'; 
+0

問題は解決しません。とにかくありがとう。 – munch

+0

@munch: '@ cnt'はどこで宣言されていますか?私はあなたがダイナミックなSQLクエリを使用しているのを参照して、あなたはそれを前に宣言していますか?そうでない場合 - クエリの前に宣言してみてください – sll

0

問題がSELECTであると思われます。 '='演算子は、このような場合に望ましい動作を達成するために比較したり、それと同様に ':='を使用します。

prepare stmt from 'select @cnt= count(weight) from test where url = ?;'; 

この変更により、コード全体が正常に動作します。

関連する問題