2016-06-29 6 views
1

以下に示すように、パラメータで渡すストアドプロシージャを呼び出しようとしています。しかし、私は私の構文がオフであることを知っていますし、文書や単体テストの中でこれを行う例はありません。ストアドプロシージャを呼び出してパラメータを渡します。

model.sequelize.query('CALL truncate_tables(\'appuser\');') 
    .then(function (response) { 
    done(); 
    }).error(function (err) { 
    done(err); 
}); 

提案はありますか?

私はこのリンクを見て始めました。 Calling stored procedures in Sequelize.js

追加情報:ここ

は私が

Unhandled rejection SequelizeDatabaseError: syntax error at or near "CALL"  

を見て、ここにいますエラーが、私はあなたは、PostgreSQLを使用していると仮定SP

CREATE OR REPLACE FUNCTION truncate_tables(username character varying) 
RETURNS void AS 
$BODY$ 
DECLARE 
    statements CURSOR FOR 
    SELECT tablename FROM pg_tables 
    WHERE tableowner = username AND schemaname = 'public'; 
BEGIN 
FOR stmt IN statements LOOP 
    EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;'; 
END LOOP; 
END; 
$BODY$ 
+0

を正確にあなたが得るエラーは何ですか? 'appuser'が文字列であることを意図している場合、構文は私にはよく見えます。 –

+0

ありがとう@SteffenLanger、質問を更新しました –

答えて

3

です。

PostgreSQLは、MySQLまたはIBM Informixなどの他のDBMSとは異なる構文でプロシージャを呼び出します。プロシージャーはCALLではなく、ストアード・プロシージャーのSELECTです。参考文献はhttps://www.postgresql.org/message-id/41F009EA.6050401%40us.michelin.comにあります。

たぶん、このコードは、このように動作します:

model.sequelize.query('SELECT truncate_tables(\'appuser\');') 
    .then(function (response) { 
    done(); 
    }).error(function (err) { 
    done(err); 
}); 
関連する問題