我想知道它是否存在一个函数,它允许我获取表的总记录数,以便将新记录插入表中?
我有这张桌子:
CREATE TABLE "TEST"
( "NAME" VARCHAR2(20 BYTE),
"ID" NUMBER,
"FLAG" NUMBER
) ;
Insert into TEST (NAME,ID,FLAG) values ('Ahlahslfh',1,1);
Insert into TEST (NAME,ID, FLAG) values ('Buoiuop',2,1);
Insert into TEST (NAME,ID, FLAG) values ('UOIP',12,0);
我的意图是发表一个与此相同的陈述:
INSERT INTO TEST( NAME, ID, FLAG )
VALUES( 'TST', 3,1 );
我在下面使用的语句生成了错误:
INSERT INTO TEST ( NAME, ID, FLAG )
VALUES ( 'TST', SELECT COUNT(*)+1 FROM TEST WHERE FLAG=1,1 );
以下是我期待的最终结果:
周围有办法吗?当然,我可以将它们放在脚本中,将记录计入变量并将该变量插入到字段中。我只是想知道是否有更优雅的解决方案并在1个声明中执行此操作。
谢谢!
答案 0 :(得分:3)
这可能是设置id
的非常糟糕的方法。一般来说,我认为你应该使用序列/身份/ auto_increment而不用担心差距。
但是,你可以使用括号做你想做的事 - 子查询需要这些:
INSERT INTO TEST(NAME, ID, FLAG)
VALUES ('TST',
(SELECT COUNT(*)+1 FROM TEST WHERE FLAG = 1),
1
);
或者,或者:
INSERT INTO TEST(NAME, ID, FLAG)
SELECT 'TST', COUNT(*) + 1, 1
FROM TEST
WHERE FLAG = 1;
我必须强调这似乎很危险。你很可能会得到重复的id
。你应该让数据库插入一个新值而不用担心差距。