[SQL] 그것은 MySQL의 저장 프로 시저에 대한 기본 매개 변수를 가질 수 있습니까?
SQL그것은 MySQL의 저장 프로 시저에 대한 기본 매개 변수를 가질 수 있습니까?
나는이를 봤와 "아니, 할 수없는"하지만이 변경된 경우 내가 궁금하네요 그래서 이러한 게시물 2,005에서 2,007 사이 일자하고 함께 올라오고 계속했다. 코드 예제 :
CREATE PROCEDURE `blah`
(
myDefaultParam int = 0 -- This breaks the code for some reason
)
BEGIN
-- Do something here
END
된 해결책 중 하나는, 널을 통과하고 널 확인하고, 변수를 설정하고있다. 나는 그렇게하고 싶지 않아 내가 할 필요가 없습니다. 이것이 사실이라면 다음 MySQL의 DEVS는 훨씬 더 내가 MSSQL과 함께 할 수 있기 때문에 깨어해야합니다.
해결법
-
==============================
1.아직 수 없습니다.
아직 수 없습니다.
-
==============================
2.우리는 저장 프로 시저에 문 IF 간단한을 추가하여이 제한을 회피. 우리는 DB의 기본 값을 저장할 때마다 실제적으로 우리는 빈 문자열을 전달합니다.
우리는 저장 프로 시저에 문 IF 간단한을 추가하여이 제한을 회피. 우리는 DB의 기본 값을 저장할 때마다 실제적으로 우리는 빈 문자열을 전달합니다.
CREATE DEFINER=`test`@`%` PROCEDURE `myProc`(IN myVarParam VARCHAR(40)) BEGIN IF myVarParam = '' THEN SET myVarParam = 'default-value'; END IF; ...your code here... END
-
==============================
3.
SET myParam = IFNULL(myParam, 0);
설명 : ISNULL (식 1, 식 2)
expression_1 null가 아닌 경우, IFNULL 함수 반환 expression_1; 그렇지 않으면 expression_2를 반환합니다. IFNULL 함수는 문자열이나가 사용되는 상황에 따라 숫자를 반환합니다.
-
==============================
4.당신이 들여다 경우 해당 프로 시저 매개 변수는 IN / OUT / INOUT 지정자, 매개 변수 이름과 유형을 포함 할 수 있습니다 볼 수 있습니다 최신 MySQL 버전에 대한 절차 구문을 만들 수 있습니다.
당신이 들여다 경우 해당 프로 시저 매개 변수는 IN / OUT / INOUT 지정자, 매개 변수 이름과 유형을 포함 할 수 있습니다 볼 수 있습니다 최신 MySQL 버전에 대한 절차 구문을 만들 수 있습니다.
따라서, 기본 값은 여전히 최신 MySQL 버전에서 사용할 수 없습니다.
-
==============================
5.불행하게도, MySQL은 그래서, 기본 매개 변수 값을 지원하지 않습니다
불행하게도, MySQL은 그래서, 기본 매개 변수 값을 지원하지 않습니다
CREATE PROCEDURE `blah` ( myDefaultParam int DEFAULT 0 ) BEGIN -- Do something here END
오류가 반환 :
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT 0) BEGIN END' at line 3
이 문제를 해결하려면 단순히 추가 절차를 만드는 것이 원래 절차에 할당 기본값 :
DELIMITER // DROP PROCEDURE IF EXISTS blah// DROP PROCEDURE IF EXISTS blah2// DROP PROCEDURE IF EXISTS blah1// DROP PROCEDURE IF EXISTS blah0// CREATE PROCEDURE blah(param1 INT UNSIGNED, param2 INT UNSIGNED) BEGIN SELECT param1, param2; END; // CREATE PROCEDURE blah2(param1 INT UNSIGNED, param2 INT UNSIGNED) BEGIN CALL blah(param1, param2); END; // CREATE PROCEDURE blah1(param1 INT UNSIGNED) BEGIN CALL blah2(param1, 3); END; // CREATE PROCEDURE blah0() BEGIN CALL blah1(4); END; //
그런 다음이 실행 :
CALL blah(1, 1); CALL blah2(2, 2); CALL blah1(3); CALL blah0();
반환합니다 :
+--------+--------+ | param1 | param2 | +--------+--------+ | 1 | 1 | +--------+--------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) +--------+--------+ | param1 | param2 | +--------+--------+ | 2 | 2 | +--------+--------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) +--------+--------+ | param1 | param2 | +--------+--------+ | 3 | 3 | +--------+--------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) +--------+--------+ | param1 | param2 | +--------+--------+ | 4 | 3 | +--------+--------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
당신이 ㅋ () 프로 시저에 세 번째 매개 변수를 추가 할 때 당신이해야합니다 경우에만 () 절차 blah2 (), blah1 ()와 blah0를 사용하여 코드를 즉시 업데이트 할 필요가 없습니다.
-
==============================
6.아니,이 MySQL을 저장 루틴 구문에서 지원되지 않습니다.
아니,이 MySQL을 저장 루틴 구문에서 지원되지 않습니다.
bugs.mysql.com에 기능 요청을 제출하여 주시기 바랍니다.
from https://stackoverflow.com/questions/982798/is-it-possible-to-have-a-default-parameter-for-a-mysql-stored-procedure by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 하나의 필드없이 entityframework에서 개체를 검색 (0) | 2020.05.10 |
---|---|
[SQL] 왜 & 언제 스파 스 열을 사용 하는가? (SQL 서버 2008) (0) | 2020.05.10 |
[SQL] 어떻게 ALTER TABLE 문에서 'DELETE CASCADE ON'추가 (0) | 2020.05.10 |
[SQL] 오라클에서 익명 테이블이나 VARRAY 유형 (0) | 2020.05.10 |
[SQL] MySQL은 / SQL : 업데이트 된 테이블 자체에서 상관 하위 쿼리와 업데이트 (0) | 2020.05.09 |