2015-06-18 3 views
1

Определить процедуру: ПроцедураНеверное количество аргументов для ПОРЯДКЕ

DELIMITER $$ 
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20)) 
proc_label:BEGIN 
    IF tablename IS NULL THEN 
      SELECT 'Null detect'; 
      LEAVE proc_label; 
    END IF; 

    SELECT 'after'; 
END; 
$$ 
DELIMITER ; 

Вызов:

CALL SP_Reporting(); 

Ошибка:

ERROR 1318 (42000): Неверное количество аргументов для ПОРЯДКЕ cds.SP_Reporting; ожидается 1, получили 0

Как пройти вар по умолчанию, как SP_Reporting(IN tablename = 'default value' VARCHAR(20))

+0

Pehaps CALL SP_Reporting (null); ? – jarlh

+1

duplicate: [Запись необязательных параметров в хранимых процедурах в MySQL?] (Https://stackoverflow.com/questions/12652241/writing-optional-parameters-within-stored-procedures-in-mysql). Также: [Возможно ли иметь параметр по умолчанию для хранимой процедуры mysql?] (Https://stackoverflow.com/questions/982798/is-it-possible-to-have-a-default-parameter-for-a -mysql-хранимая процедура) –

ответ

2

Вы должны передать имя таблицы в операторе вызова процедуры, как:

ВЫЗОВА SP_Reporting (table_name);

Вы не можете передать значение по умолчанию в операторе вызова. Вы можете назначить значение по умолчанию перед вызовом процедуры. или используйте OUT вместо IN в качестве параметра.

0

вы пропустите параметр: имя_таблицам вам нравится это: вызов SP_Reporting («любой VARCHAR»)
или вызов SP_Reporting (нуль)

3

Когда вы делаете хранимую процедуру, вы можете назначить значение для вашего ввода, поэтому нет необходимости передавать параметры во время вызова proc.

Обычно мы назначаем NULL и для того, чтобы сделать параметры необязательными, мы используем этот метод.

tablename VARCHAR(20) = NULL 

Ваш полный сценарий:

DELIMITER $$ 
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20) = NULL) 
proc_label:BEGIN 
    IF tablename IS NULL THEN 
      SELECT 'Null detect'; 
      LEAVE proc_label; 
    END IF; 

    SELECT 'after'; 
END; 
$$ 
DELIMITER ; 

EDIT

MySQL не принимает дополнительные параметры. Таким образом, один из способов - передать значение NULL в хранимой процедуре и проверить его с помощью инструкции IF внутри вашего proc.

DELIMITER $$ 
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20)) 
proc_label:BEGIN 
    IF tablename IS NULL THEN 
      -- Do something; 
    ELSE 
      -- Do something else; 
    END IF; 
END; 
$$ 
DELIMITER ; 
+0

И ошибка ?? – sqluser

+0

Правильный синтаксис ERROR 1064 для использования около '= NULL –

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