2014-03-03 41 views
-1

已更新 我一直在努力研究爲什麼我的過程不能工作一段時間。所以任何人都可以幫助我,對不起,我還是很新的SQL。它應該根據課程名稱查找course_number。如果找不到匹配項,則默認課程編號爲* *。然後它將新記錄插入student_course表中。這裏是數據庫的副本我使用的第1行執行的執行過程中的錯誤過程[已更新]

* 錯誤時顯示https://www.dropbox.com/s/cmqmzggiygxbkth/dissertation_database.txt https://www.dropbox.com/s/hm90jga9zsaawnt/course_procedure.txt

CREATE OR REPLACE PROCEDURE upda_course 
(name IN VARCHAR2) 
IS 
    course_id VARCHAR2; 
    cursor c1 is 
    SELECT course_id 
FROM courses 
    WHERE name = name; 
BEGIN 
    open c1; 
    fetch c1 into course_id; 
    if c1%notfound then 
     course_id := 9999; 
    end if; 

    INSERT INTO course_modules 
    (course_id, module_id 
    ) 
    VALUES 
    (name, 
    course_id); 

    commit; 

    close c1; 

EXCEPTION 
WHEN OTHERS THEN 
    raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); 
END upda_course; 
/
SHOW ERRORS; 
EXECUTE upda_course('business computing systems'); 
SHOW ERRORS; 

錯誤: ORA-20001:遇到一個錯誤 - -6502·ERROR - ORA-06502:PL/SQL:數字 或錯誤值:字符數轉換錯誤 ORA-06512:在 「INS2014_106.UPDA_COURSE」,第29行 ORA-06512:在第1行

+3

您沒有指定輸入參數。爲輸入參數指定一個值並再次執行 – Incognito

+0

'WHERE name = name;'您的列名與變量名相同?也許你會掩蓋代碼。但是隻是想讓你知道,當有衝突的時候,這是Oracle會提及的專欄!而在你的插入中,你將'NUMBER'插入到'VARCHAR' /'CHAR'字段.. ?? !!或反之亦然..因此,這個錯誤 –

+0

你可以顯示你的表結構? –

回答

0

請嘗試,

過程進行參數(名稱)作爲輸入:

EXECUTE upda_course 'somename'; 
0

試試這個:

EXECUTE upda_course('some course'); 
+0

謝謝我嘗試過,並且在第1行出現此錯誤ERROR: ORA-20001:遇到錯誤 - -6502 -ERROR- ORA-06502:PL/SQL:數字 或值錯誤:字符到數字轉換錯誤 ORA-06512:在「INS2014_32。UPDA_COURSE「,第33行 ORA-06512:在第1行EXECUTE upda_course('business computing systems'); BEGIN upda_course('business computing systems'); END; – user3374745

+0

course_id是一個varchar(我理解你正在傳遞一個參數爲varchar),其中作爲 光標C1是 SELECT COURSE_ID FROM課程WHERE 名=名稱; 而獲取從上面你取到的數值光標值:) – Maddy

0

指定輸入參數

EXECUTE upda_course 'somename'; 
0

我的輸入值相信course_idcourse_modules表中也是一個數字。您正嘗試將一個varchar2插入到列號爲Number的列中,因此發生錯誤。同樣,使用輸入變量作爲v_name之類的內容,因爲以下查詢將返回表中的所有行,因爲變量名與列名相同。與程序中的變量course_id相同。

SELECT course_id 
FROM courses 
    WHERE name = name; 
+0

它只有當我執行它。是失敗的,所以在創建過程 – user3374745

+0

時,這仍然意味着它與我的代碼有關,是的,它不會給compilition錯誤,在運行時會出現錯誤。 –

+0

我已經檢查過創建和我的兩個ID都存儲爲VARCHAR2 – user3374745