Sql 计数(*)=0的计算结果是否为真?

Sql 计数(*)=0的计算结果是否为真?,sql,oracle,oracle9i,Sql,Oracle,Oracle9i,正如标题所说。我在if语句中有一条SQL语句Oracle 9,该语句的计算结果为true。据我回忆,这样一个语句将实现SQL Server中所期望的功能。在这种情况下,我做错了什么 IF (SELECT COUNT(*) FROM CUSTOMER_LIST WHERE CUSTOMER='Target')=0 THEN INSERT INTO CUSTOMER_LIST (CUSTOMER_ID, CUSTOMER) VALUES (CUSTOMER_ID_SEQ.nextval, 'Ta

正如标题所说。我在if语句中有一条SQL语句Oracle 9,该语句的计算结果为true。据我回忆,这样一个语句将实现SQL Server中所期望的功能。在这种情况下,我做错了什么

IF (SELECT COUNT(*) FROM CUSTOMER_LIST WHERE CUSTOMER='Target')=0 THEN  
INSERT INTO CUSTOMER_LIST (CUSTOMER_ID, CUSTOMER) VALUES
(CUSTOMER_ID_SEQ.nextval, 'Target')
或者更好的是,什么是确保我不插入已经存在的数据的适当策略。编写的代码总是插入。这显然不是我想要的,因为这一行已经存在

当这段代码运行时,我得到以下控制台消息

Error starting at line 1 in command:
IF (SELECT COUNT(*) FROM CUSTOMER_LIST WHERE CUSTOMER='Target')=0 THEN
Error report:
Unknown Command
1 rows inserted.

问题似乎是,在它需要直接SQL的地方,您给了它PL/SQL。要么直截了当地说:

INSERT INTO CUSTOMER_LIST (CUSTOMER_ID, CUSTOMER)
SELECT CUSTOMER_ID_SEQ.nextval, 'Target' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM CUSTOMER_LIST WHERE CUSTOMER = 'Target')
或者更改周围的上下文,以便Oracle使用PL/SQL。这将取决于您如何传入此代码;但一种可能的方法是把它包装在一个开始。。。端块

此外,不能将查询用作PL/SQL中的表达式;如果使用PL/SQL路径,则需要将结果存储在某个位置,例如变量中。总而言之,您可能会有以下情况:

DECLARE
  v_customer_exists INTEGER;
BEGIN
  SELECT COUNT(*) INTO v_customer_exists FROM CUSTOMER_LIST WHERE CUSTOMER='Target';
  IF v_customer_exists = 0 THEN
    INSERT INTO CUSTOMER_LIST (CUSTOMER_ID, CUSTOMER) VALUES
    (CUSTOMER_ID_SEQ.nextval, 'Target');
  END IF;
END;
/

尝试类似这样的操作以检查是否从选择返回了任何行。NOT EXISTS在没有从select返回元组时返回true:

IF  NOT EXISTS (SELECT * FROM CUSTOMER_LIST WHERE CUSTOMER='Target') THEN  
INSERT INTO CUSTOMER_LIST (CUSTOMER_ID, CUSTOMER) VALUES
(CUSTOMER_ID_SEQ.nextval, 'Target')

与MSSQL相比,我现在很鄙视它,但唉,我不能选择我雇主的db:'这是整个区块,还是有更多的代码?IF是一个PL/SQL命令,因此至少需要在整个块周围有BEGIN和END。CUSTOMER不是唯一的字段吗…如果是,您可以尝试插入并计算返回0或1的行数…?围绕if?我得到ORA-06550:第2行,第63列:PLS-00103:在期望下列情况之一时遇到符号:.*@%&-+;/对于mod rem和或组,具有相交-顺序起始并集,其中连接| | 06550。00000-行%s,列%s:\n%s*原因:通常是PL/SQL编译错误*操作:当我这样做时,如果不存在请尝试从CUSTOMER='Target'所在的CUSTOMER_列表中选择*。我从命令:END IF Error report:Unknown命令的第4行开始收到错误
IF  NOT EXISTS (SELECT * FROM CUSTOMER_LIST WHERE CUSTOMER='Target') THEN  
INSERT INTO CUSTOMER_LIST (CUSTOMER_ID, CUSTOMER) VALUES
(CUSTOMER_ID_SEQ.nextval, 'Target')