2014-12-16 3 views
-4

У меня есть следующая процедура для вставки пользователя в базу данных. Я использую 4 параметра in-parameters и 1 out-parameter. Исходный параметр заполняется последовательностью. Структура таблицы - это user_id и имена 4 первых параметров.PLS-00306: неправильное количество или типы аргументов при вызове

CREATE OR REPLACE PROCEDURE insert_user 
(
P_USERNAME IN varchar2, 
P_PASSWORD IN varchar2, 
P_COMPANY_EMAIL IN varchar2, 
P_EMPLOYEE_ID IN number, 
P_USER_ID OUT int) 
AS 

BEGIN 


INSERT INTO system_users.users(USERNAME, PASSWORD, COMPANY_EMAIL, EMP_ID) 
VALUES 
(P_USERNAME, P_PASSWORD, P_COMPANY_EMAIL, P_EMPLOYEE_ID); 


dbms_output.put_line (P_USER_ID); 

END; 

Я получаю ошибку, что у меня есть неправильное число или типы аргументов при вызове процедуры. Я назвал это так:

insert_user('user', 'password', '[email protected]', '5'); 

Я попытался назвать его с началом и концом вокруг него, я попытался число без кавычек, все wiithout кавычки.

Что я делаю неправильно? Может ли это иметь какое-то отношение к триггеру, не заполняющему user_id?

С уважением,

Винсент

EDIT: JIC это триггер, вот код триггера. Это сработало, но я заметил, что в коде был провал, поэтому я его отредактировал. FSR говорит, что таблица, которую я пытаюсь найти (system_users.users) не существует (недопустимый идентификатор)

ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, помогите мне!

create or replace trigger user_trig_bi 
     Before insert on system_users.users 
     for each row  

begin 
      select user_seq.nextval 
      into new.user_ID 
      From dual 
     where exists (SELECT emp_id 
        from hrm_repo.employees 
        where hrm_repo.employees.emp_id = system_users.users.emp_id); 
END; 

Ошибка я получаю: Error (7,55): PL/SQL: ORA-00904: "SYSTEM_USERS" "юзеры" "emp_id".:. Недопустимый идентификатор

ответ

2

С вашей процедуры имеет out переменной, обеспечить ее пятой переменной, чтобы получить out значение:

declare 
    p_user_id int; 
begin 
    insert_user('user', 'password', '[email protected]', '5', p_user_id); 
end; 

Примечание: вы не установите значение в вашей процедуре, так что вы можете либо оставить его прочь на всех или вы должны установите его в своей процедуре.

+1

прямо на месте. – Rahul

+0

Спасибо за ваш ответ! Это сработало, или это сработало бы, если бы мой триггер был прав. Не могли бы вы помочь мне с ошибкой в ​​моем триггере, чтобы заполнить p_user_id? –

+0

Я все равно могу помочь мне с помощью спускового крючка? Заранее спасибо! Тем временем я решил вырезать часть, где я проверяю, существует ли emp_id в другой таблице, и говорит, что должен быть определен new.user_id. –

Смежные вопросы