Oracle

如何在oracle中進行受限視圖?

  • November 29, 2021

我必須為應用程序模式提供數據,但是要求使用該模式使用者連接的應用程序一次不能查詢超過五行,應用程序從視圖中查詢數據,我如何重寫所有應用程序查詢(所有這些使用者查詢)rownum < 5在 where 子句中有什麼?

我正在使用 Oracle 12c。

解決方案 - 無狀態應用程序(網路)

修復應用程序。

應用程序必須將andOFFSET子句添加FETCH NEXT到 SQL,因為它是定義and子句的應用程序ORDER BY``WHERE

這就是 Oracle APEX 為其互動式報告所做的。

解決方案 - 有狀態的應用程序

修復應用程序。

與其一次獲取所有數據,不如讓語句句柄保持打開 ( sth) 並一次獲取 5 行。

原因

數據庫不會讓事情井井有條。(我忽略了物聯網)

如果您告訴數據庫“我只需要 5 行”,那麼每次執行查詢時您將獲得 5 個隨機行。(通常是相同的 5 行。但是,你需要像他們隨機吃一樣計劃)

這使您的書面請求具有不確定性。

如果您需要“第nORDER BY 5 行”,則必須首先使用子句定義這些行的順序。然後(在該級別)您可以“一次獲取 5 行”。

您可以使用FETCH NEXT子句。連結教程中的範例:

SELECT
   product_name,
   quantity
FROM
   inventories
INNER JOIN products
   USING(product_id)
ORDER BY
   quantity DESC 
FETCH NEXT 5 ROWS ONLY;

在您的情況下,由於您想限制從現有視圖返回的行數,您所要做的就是:

SELECT
   YourColumns
FROM
   YourView
ORDER BY
   SomeFieldToOrderBy
FETCH NEXT 5 ROWS ONLY;

引用自:https://dba.stackexchange.com/questions/303228