![](/img/trans.png)
[英]How to chain raw SQL queries in Rails OR how to return an ActiveRecord_Relation from a raw SQL query in Rails?
[英]Declare Rails model from raw sql query
我寫了一個 SQL 函數,它接受一個參數並返回表類型。
SQL 函數 -
create or replace function get_some_data (p_val in number)
return my_tab_type_coll pipelined as
begin
FOR i in (select final_test_tb.*, PERIOD_BETWEEN_TWO_DATES(
FROM_TZ(CAST(from_date AS TIMESTAMP), 'UTC'),
FROM_TZ(CAST(to_date AS TIMESTAMP), 'UTC') as period
from (
select dl.id, dl.trip_id, dl.address, dl.from_date, dl.avg_speed, dl.high_speed,
case when tmp = 2 and nvl(lead(avg_speed) over (order by received_at asc), 1) = 0
then lead(to_date) over (order by received_at asc)
else to_date end to_date, tmp
from (
select test.*, case when avg_speed <> 0 then 1
when nvl(lag(avg_speed) over (order by received_at asc), 1) <> 0 then 2
when nvl(lead(avg_speed) over (order by received_at asc), 1) <> 0 then 3
end tmp
from test
where foo_id = p_val) dl
where tmp is not null) final_test_tb
where tmp in (1, 2)) loop
pipe row(my_tab_type(i.id, i.foo_id,
i.avg_speed, i.high_speed, i.distance, i.address_en, i.from_date, i.to_date));
end loop;
return;
end;
在這里,我已經創建了兩種類型,即行類型 - my_tab_type 和表類型 -my_tab_type_coll
使用 sql 命令獲取記錄時 =>
select * from TABLE(get_some_data(10003));
是否可以從此函數構建 rails 模型? 這樣,就可以為該模型/表應用過濾器和分頁。
可能的? 是的......但可能是個好主意? 不。
Active Record 非常適合簡單的表。
SQL 函數不是一個很好的匹配,並且可能更難與 Active Record 集成,然后只使用“執行” - 並迭代結果集。
這是一個 StackOverflow 問題,可能會對此有所幫助: Rails 3 execute custom sql query without a model
我會建議一個稍微不同的方法:不是返回一個“臨時表”,而是讓它成為一個真正的表,但添加一列:會話鍵或用戶鍵。
如果表剛剛存在,您可以創建模型。 當您需要數據時,您還可以提供“用戶密鑰”或“會話密鑰”,以便多個會話可以在同一個表中計算內容,但不會相互干擾。
這樣,恕我直言,您可以兩全其美:您的函數可以即時計算數據,但它會插入一個表中,該表充當臨時表,但會持續存在,因此您的模型可以依賴它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.