Ruby葡萄POSTGRESQL存储过程

Ruby Grape POSTGRESQL stored procedure

正在尝试执行 procedure/function 存储在 Ruby Grape API 包中的 POSTGRESQL。我的服务器中有函数 getactivesites(),其中 returns 站点名称。

服务器代码:

BEGIN

    RETURN QUERY SELECT "SITE_ID",
            "SITE_NAME"
        FROM public.sites WHERE "ACTIVE_FLAG" = true
        ORDER BY "SITE_NAME" ASC ;
    END;

ruby代码:

resource :getsites do

desc “Get Active Sites“
get do
  results =  ActiveRecord::Base.connection.execute("execute getactivesites")
  return results
end

我 运行 时得到的错误是“PG::InvalidSqlStatementName:错误:准备好的语句 "getactivesites" 不存在:执行 getactivesites”

尝试 select 而不是 execute:

ActiveRecord::Base.connection.execute("select getactivesites()")

这是我的真实项目:

Db.execute( 'select my_sp_name( ? )', my_sp_param )

其中 Db 是糖,如:

# -*- frozen-string-literal: true -*-
# Syntax sugar module
module Db
  extend self

  delegate :transaction, to: ApplicationRecord

  def sanitize( *args )
    ApplicationRecord.send( :sanitize_sql, args )
  end

  def execute( *args )
    ApplicationRecord.connection.execute( sanitize( *args ) )
  end

end