5

入れ子集合モデルの例をプロシージャで適用しようとしています。私はこのテクニックでそれらの多くを見つけました、そしてその過程で私は問題を見つけました。プロシージャを呼び出すたびに取得しunknown table XXXます。プロシージャを作成したとき、まったく問題はありませんでした。簡単な例:

CREATE PROCEDURE `sp_getRoleTree` (IN root INT)
  READS SQL DATA
BEGIN
    DECLARE rows SMALLINT DEFAULT 0;
    DROP TABLE IF EXISTS ROLE_TREE;
    CREATE TABLE ROLE_TREE (
        nodeID INT PRIMARY KEY
    ) ENGINE=HEAP;

    INSERT INTO ROLE_TREE VALUES (root);

    SELECT * FROM ROLE_TREE;
    DROP TABLE ROLE_TREE;
END;

だから私の質問は、私はここで何か間違ったことをしていますか(それはサンプルコードです)、コードが正常である場合、存在する場合の警告を無効にできますか?この種の警告を引き起こしているプロシージャ内の特別なループはありますか?

4

2 に答える 2

3

回避策として、テーブルを再作成するのではなく、切り捨ててみてください。

DROP TABLE/を使用しないでくださいCREATE TABLE。このテーブルを一度 (または必要なときに) 作成し、TRUNCATE TABLEコマンドを使用します。

于 2012-10-29T15:35:22.030 に答える
2

DROP TABLE IF EXISTS tbl;テーブルが存在しない場合に使用すると、MySQL は警告を生成します。これは紛らわしく、直感に反するかもしれませんが、予期される動作です。

http://dev.mysql.com/doc/refman/5.5/en/drop-table.htmlから

存在しないテーブルに対してエラーが発生しないようにするには、IF EXISTS を使用します。IF EXISTS を使用すると、存在しないテーブルごとに NOTE が生成されます。セクション 13.7.5.41, SHOW WARNINGS 構文を参照してください。

IF EXISTS は、MySQL がエラーをスローするのを防ぎます。これは良いことですが、テーブルが存在しない場合は警告が発生します。この警告を抑制するオプションはありません。

于 2013-02-14T17:58:17.320 に答える