Rig*_*Rig 0 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, 'Target')
Run Code Online (Sandbox Code Playgroud)
或者更好的是,确保我不插入已存在的数据的适当策略是什么.写入的代码总是插入.这显然不是我想要的,因为这一行已经存在.
当此代码运行时,我收到以下控制台消息.
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.
Run Code Online (Sandbox Code Playgroud)
问题似乎是你给PL/SQL它期待直接的SQL.要么直截了当地说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')
Run Code Online (Sandbox Code Playgroud)
或者更改周围的上下文,以便Oracle期望PL/SQL.这取决于你如何传递这些代码; 但一种可能的方法是将它包装在一个BEGIN ... END区块中.
此外,您不能将查询用作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;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |