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

时间:2014-11-08 14:10:39

标签: 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, 
    "USERNAME" VARCHAR2(30 BYTE), 
    "IPADDRESS" VARCHAR2(30 BYTE), 
    "LOGINTIME" TIMESTAMP (6), 
    "LOGOUTTIME" TIMESTAMP (6)
   ) SEGMENT CREATION IMMEDIATE 

如果没有达到最大数量,你能告诉我如何插入表格吗?我想用准备好的声明来做这件事。

2 个答案:

答案 0 :(得分:1)

我通常会将此问题作为Creating a table with max number of rows (ORACLE)的副本关闭。基本上,这几乎是不可能的,如果你需要这样做,你可能做错了什么。您不希望在插入表之前计算表中的记录数 - 这是一项过多的工作。

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

如果仍然需要在此之后维护表,那么你可以使用BEFORE LOGON和BEFORE LOGOFF触发器来维护它(虽然我不确定ACTIVITYEND和{{1可以用于),BEFORE LOGIN触发器将插入到表中,BEFORE LOGOFF将从中删除。

答案 1 :(得分:0)

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

(对不起 - 暂时不允许发表评论。所以如果这有帮助的话,请谅解Ben。否则:还需要什么?)