Sql 如果行大小小于300,则在Oracle表中插入

Sql 如果行大小小于300,则在Oracle表中插入,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有一个表,其中我希望最多有300行数据: CREATE TABLE "ADMIN"."SESSIONS" ( "SESSIONID" VARCHAR2(30 BYTE), "SESSIONTYPE" NUMBER(*,0), "USERID" VARCHAR2(30 BYTE), "ACTIVITYSTART" TIMESTAMP (6), "ACTIVITYEND" TIMESTAMP (6), "ACTIVITY" CLOB,

我有一个表,其中我希望最多有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 

你能告诉我,只有在没有达到最大数量的情况下,我如何才能插入到表中吗?我想用事先准备好的陈述来回答这个问题。

我通常会把这个问题作为问题的副本来结束。基本上,这几乎是不可能的,如果你需要这样做,你可能做错了什么。您不希望在插入表之前计算表中的记录数,这是一项大量的额外工作

但是,给定表中列名的名称,可能有一种更简单的方法。将参数更改为300。这将把数据库限制为300个并发会话。如果试图创建第301个会话,则会引发错误ORA-00018超出最大会话数。如果您限制并发用户的数量,您可能必须相对积极地删除未使用的连接-这取决于您预期的用户数量


如果在此之后仍然需要维护该表,则可以使用登录前和注销前触发器来维护它(尽管我不确定
ACTIVITYEND
LOGOUTTIME
可以用于什么),登录前触发器将插入表中,注销前触发器将从表中删除。

向表中添加一个ID列,使用Jeffrey Kemp建议的@Ben一直指向的序列控制其值


(抱歉-目前还不允许评论。如果这有帮助,请相信Ben。否则:还需要什么?

如果只有一个线程执行插入,这并不困难,如果有多个线程,则更困难。你的情况如何?这个限制有多重要?您可以允许插入300多行,然后使用job删除不必要的行,您可以使用view with condition
rownum如何:插入到会话(SESSIONID、SESSIONTYPE、USERID、ACTIVITYSTART、ACTIVITYEND、ACTIVITY、USERNAME、IPADDRESS、LOGINTIME、LOGOUTTIME)选择?、null、、sysdate、sysdate、‘admina’、sysdate、,会话的sysdate具有COUNT(*)<?;请解释一下你为什么要这么做。还有其他解决办法吗?如果我知道的话,我会把它贴在@Peter;这并不意味着一个人不存在。