当在Oracle数据库我有以下两个表:“无效的SQL语句”创建PL/SQL程序
Task (TaskID, ..., AuthorID)
Author (AuthorID, level)
其中AuthorID
在Task
表示写任务的作者。现在我编写了以下程序,该程序应该更新level
- 基于作者编写的任务数量进行分配。
CREATE OR REPLACE PROCEDURE profil_level
IS
CURSOR c1 IS SELECT AuthorID, COUNT(AuthorID) as Total FROM Task
GROUP BY AuthorID;
result c1%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO result;
EXIT WHEN c1%NOTFOUND;
IF(result.Total = 2 OR result.Total = 3) THEN
UPDATE TABLE Author SET level = 'advanced'
WHERE AuthorID = result.AuthorID;
END IF;
IF(result.Total >= 4) THEN
UPDATE TABLE Author SET level= 'proficient'
WHERE AuthorID = result.AuthorID;
END IF;
END LOOP;
CLOSE c1;
END;
试图执行该语句,我得到吨的错误一样
无效SQL语句
例如行result c1%ROWTYPE
或FETCH c1 into result
。此外,我得到的错误
PLS-00103:出现符号期待的 下列操作之一时, “-的文件结束”:...
为线BEGIN OPEN c1
。我弄不明白,我的代码有什么问题。我已经阅读了Oracle和其他站点上的教程,但是到目前为止我看过的每个示例中,他们都使用了完全相同的语法。我是否需要更改'分隔符'(例如在MySQL中)?
感谢您的帮助!
如果您在使用SQL * Plus,你需要终止'创建table'用'/'(在同一行) –
@ a_horse_with_no_name我已经尝试过,但没有区别(只是再次检查)。 – kaufmanu
@a_horse_with_no_name你确实是指'create table'语句,还是只是一个错字,而你的意思是'create procedure'?编辑:是的,我意识到这一点(但有些人希望我专门创建一个程序;-)) – kaufmanu