【发布时间】:2012-11-28 22:13:35
【问题描述】:
在 Oracle 数据库中,我有以下两个表:
Task (TaskID, ..., AuthorID)
Author (AuthorID, level)
Task 中的AuthorID 代表编写任务的作者。现在我写了下面的程序,应该是根据作者写的任务数量来更新level-Attribute。
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,您需要使用
/终止create table(在单行上) -
@a_horse_with_no_name 我已经尝试过了,但没有任何区别(只是再次检查)。
-
@a_horse_with_no_name 你真的是指
create table声明还是只是一个错字而你的意思是create procedure?编辑:是的,我知道(但有些人希望我专门创建一个程序;-)) -
抱歉,我的意思当然是
create procedure。查看我发布的链接并单击构建架构。 -
@a_horse_with_no_name 很好的链接 - 谢谢!我试图用我的整个代码构建架构,但它不起作用(检查this)。我的代码一定有问题...
标签: oracle stored-procedures plsql