2016-05-02 2 views
-4

Вставить заявление хранимой процедуры в Oracle с помощью SQL Developer:Ошибка в Oracle вставка хранимая процедура

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 синтаксис ЦЕННОСТИ/SELECT', 2) Избегайте' MAX (...) + 1', это не очень хорошо масштабируется, рассмотреть вопрос об использовании Sequence – lad2025

+0

спасибо для вашего ответа можете ли вы опубликовать код после редактирования !? заблаговременно –

+0

Просьба указать пример данных, объясняя, что должна делать ваша процедура – Aleksej

ответ

0

Инструмент используется (SQL Developer) не имеет никакого значения на правильный ответ. Вот одна возможность:

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; 
Смежные вопросы