當在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