J'essaie d'exécuter manuellement des commandes SQL pour pouvoir accéder aux procédures dans NuoDB.
J'utilise Ruby sur Rails et j'utilise la commande suivante:
ActiveRecord::Base.connection.execute("SQL query")
La "requête SQL" peut être n'importe quelle commande SQL.
Comme par exemple, j'ai une table appelée "Feedback" et quand j'exécute la commande:
ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")
Cela ne ferait que renvoyer une "vraie" réponse au lieu de m'envoyer toutes les données demandées.
Voici la sortie sur la console Rails:
SQL (0.4ms) SELECT `feedbacks`.* FROM `feedbacks`
=> true
J'aimerais utiliser ceci pour appeler des procédures stockées dans NuoDB, mais lors de l'appel des procédures, ceci renvoie également une réponse "vraie".
Est-il possible d'exécuter des commandes SQL et d'obtenir les données demandées au lieu d'obtenir une réponse "vraie"?
La commande de travail que j'utilise pour exécuter des instructions SQL personnalisées est la suivante:
results = ActiveRecord::Base.connection.execute("foo")
avec "foo" étant l'instruction SQL (c'est-à-dire "SELECT * FROM table").
Cette commande retournera un ensemble de valeurs sous forme de hachage et les mettra dans la variable de résultats.
Donc sur mon Rails application_controller.rb, j'ai ajouté ceci:
def execute_statement(sql)
results = ActiveRecord::Base.connection.execute(sql)
if results.present?
return results
else
return nil
end
end
Utiliser execute_statement retournera les enregistrements trouvés et s'il n'y en a pas, il retournera nil.
De cette façon, je peux simplement l'appeler n'importe où sur l'application Rails, comme par exemple:
records = execute_statement("select * from table")
"execute_statement" peut également appeler des procédures, des fonctions et des vues de base de données NuoDB.
Pour moi, je ne pouvais pas obtenir ceci pour retourner un hachage.
results = ActiveRecord::Base.connection.execute(sql)
Mais utiliser la méthode exec_query a fonctionné.
results = ActiveRecord::Base.connection.exec_query(sql)
Republier la réponse de notre forum pour aider les autres avec un problème similaire:
@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }
Le code ci-dessus est un exemple pour