2016-05-02 81 views
-4

插入存儲過程語句在甲骨文:錯誤在Oracle中使用SQL Developer將INSERT存儲過程

CREATE OR REPLACE PROCEDURE T_Department_INSERT 
AS 
BEGIN 
    insert INTO T_Department(dept_id, dept_name, dept_location, manager_id) 
    values(select case count(*) when 0 then 1 else max(dept_id) + 1 (end.from T_Department), 
      par_dept_id, par_dept_name, par_dept_location, par_manager_id); 
     NULL; 
END T_Department_INSERT; 
+0

1)不要混用'INSERT INTO VALUES/SELECT'語法,2)避免'MAX(...)+ 1',它不能很好地擴展,可以考慮使用序列 – lad2025

+0

感謝對於你的回覆 你可以在編輯後發佈代碼! 在此先感謝 –

+0

請發佈一個數據的例子,說明你的過程應該做什麼 – Aleksej

回答

0

使用(SQL開發人員)的工具,使正確答案沒有區別。這是一個可能性:

CREATE TABLE t_department 
    (
     dept_id   INTEGER 
    , dept_name  VARCHAR2 (20) 
    , dept_location VARCHAR2 (100) 
    , manager_id  INTEGER 
    ); 

    CREATE SEQUENCE t_department_seq; 

    CREATE OR REPLACE TRIGGER t_department_trg 
     BEFORE INSERT 
     ON t_department 
     REFERENCING NEW AS new OLD AS old 
     FOR EACH ROW 
    BEGIN 
     :new.dept_id := t_department_seq.NEXTVAL; 
    END t_department_trg; 

    CREATE OR REPLACE PROCEDURE t_department_insert (
     p_dept_name  IN t_department.name%TYPE 
    , p_dept_location IN t_department.location%TYPE 
    , p_manager_id  IN t_department.manager_id%TYPE 
    ) 
    AS 
    BEGIN 
     INSERT INTO t_department (
       dept_name, dept_location, manager_id 
        ) 
      VALUES (p_dept_name, p_dept_location, p_manager_id); 
    END t_department_insert;