2014-11-08 34 views
-1

我有這個表中,我希望有最大300行數據:插入在Oracle表中,如果行大小小於300

CREATE TABLE "ADMIN"."SESSIONS" 
    ( "SESSIONID" VARCHAR2(30 BYTE), 
    "SESSIONTYPE" NUMBER(*,0), 
    "USERID" VARCHAR2(30 BYTE), 
    "ACTIVITYSTART" TIMESTAMP (6), 
    "ACTIVITYEND" TIMESTAMP (6), 
    "ACTIVITY" CLOB, 
    "USERNAME" VARCHAR2(30 BYTE), 
    "IPADDRESS" VARCHAR2(30 BYTE), 
    "LOGINTIME" TIMESTAMP (6), 
    "LOGOUTTIME" TIMESTAMP (6) 
    ) SEGMENT CREATION IMMEDIATE 

你能告訴我怎樣才能插入到表僅在最大數量沒有達到?我想用準備好的陳述來做到這一點。

+0

這並不難,如果將只有一個線程執行的插入和如果有多個線程會更困難。你的情況如何? – Multisync 2014-11-08 14:13:42

+0

這個限制有多重要?你可以允許插入超過300行,然後使用作業來刪除不必要的行,你可以使用視圖,條件爲'rownum <= 300'來隱藏它們... – Dmitry 2014-11-08 21:42:15

+0

這個怎麼樣:INSERT INTO SESSIONS(SESSIONID,SESSIONTYPE,USERID ,ACTIVITYSTART,ACTIVITYEND,ACTIVITY,USERNAME,IPADDRESS,LOGINTIME,LOGOUTTIME)選擇?,null,?,sysdate,sysdate,?,'admina',?,sysdate,sysdate FROM SESSIONS COUNT(*)<? – 2014-11-08 21:45:10

回答

1

我通常會將此問題作爲Creating a table with max number of rows (ORACLE)的副本來結束。基本上,這幾乎是不可能的,如果你需要這樣做,你可能做錯了什麼。在插入表格之前,您不希望計算表格中的記錄數量 - 這是很多額外的工作。

但是,考慮到表中列名的名稱,這可能是一個更簡單的方法。修改SESSIONS參數爲300.這將限制您的數據庫爲300個併發會話。如果嘗試創建301 st會話,則會提高錯誤ORA-00018會話的最大會話數超過。如果限制併發用戶的數量,您可能必須相對積極地放棄未使用的連接 - 這取決於您期望的用戶數量。

如果仍然需要保持在此之後,然後纔可以使用登錄和BEFORE註銷觸發器來維持它(雖然我不知道什麼ACTIVITYENDLOGOUTTIME可用於)表中,BEFORE登錄觸發器會插入到表中並且BEFORE LOGOFF將從其中刪除。

+0

有沒有其他解決方案? – 2014-11-08 14:36:19

+0

如果我知道一個我會發布它@Peter;這並不意味着不存在。 – Ben 2014-11-08 20:05:49

0

在您的表格中添加一個ID列,使用Jeffrey Kemp在@Ben指向的Creating a table with max number of rows (ORACLE)中建議的序列控制其值。

(對不起 - 不允許發表評論,但因此,如果這會有所幫助,信貸奔,請否則:?所需其他資料)