【发布时间】:2010-11-30 14:11:55
【问题描述】:
我需要通过 SELECT 语句检查表中是否存在记录。如果记录存在,则进行更新,否则在表上创建记录。我正在尝试,但我收到 PLS-00103 错误。
这些是我在 DBVisaulzier 中运行代码时遇到的错误:
18:00:09 [DECLARE - 0 row(s), 0.000 secs] [Error Code: 6550, SQL State: 65000] ORA-06550: line 2, column 12:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( @ % ; not null range default character
18:00:09 [BEGIN - 0 row(s), 0.000 secs] [Error Code: 6550, SQL State: 65000]
ORA-06550: line 2, column 97:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
;
18:00:09 [IF - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000] ORA-00900: invalid SQL statement
18:00:09 [ELSE - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000]
ORA-00900: invalid SQL statement
18:00:09 [END - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000] ORA-00900: invalid SQL statement
18:00:09 [END - 0 row(s), 0.000 secs] [Error Code: 900, SQL State: 42000] ORA-00900: invalid SQL statement
... 6 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 6 errors]
以下是我的代码:
DECLARE a NUMBER;
BEGIN
SELECT 1
INTO a
FROM FREC_EMAIL t
WHERE t.FranchiseNo = '208254846'
AND t.ReportID = 1
AND t.id = 165;
IF a=1 THEN
UPDATE FREC_EMAIL
SET email = 'blah@foo.com'
WHERE FranchiseNo = '208254846'
AND ReportID = 1
AND ID = 165;
ELSE
INSERT INTO FREC_EMAIL
(FranchiseNo, Email, ReportID)
VALUES
('208254846', 'blah@foo.com', 1);
END IF;
END;
【问题讨论】:
-
考虑使用 MERGE 语句。
-
你能举个例子吗?很抱歉问这个问题,但我是 PL/SQL 的新手。
-
看起来编译器在抱怨几件事。您可以尝试将 SELECT 1 INTO a 更改为 SELECT ID INTO a 吗?
-
ORA 错误指向尝试运行无效的 SQL 语句。 “SELECT 1 INTO a...”没有任何问题 - 我相信问题是由于 Jack 试图将其作为匿名 sproc 运行。可能是 SQLPlus 末尾缺少“/”的问题...
标签: sql oracle plsql upsert ora-00900