구문
설명
저장 프로시저를 만듭니다. 기본적으로 루틴은 다음과 같습니다.기본 데이터베이스와 연결됩니다. Routineexplically 를 주어진 데이터베이스와 연결하려면 이름을 db_name 으로 지정하십시오.sp_namewhen 당신이 그것을 만들 수 있습니다.
루틴이 호출되면 암시 적 사용 db_name 이 수행됩니다(루틴이 종료 될 때 andundone). 루틴이 가지고있는 원인그것이 실행되는 동안 주어진 기본 데이터베이스. 명령문 사용설정 된 루틴은 허용되지 않습니다.,
저장 프로 시저가 생성되면CALL
명령문(호출 참조)을 사용하여 호출합니다.
CREATE PROCEDURE
문을 실행하려면CREATE ROUTINE
권한이 필요합니다. 기본적으로 MariaDBautomatically 는 theroutine 작성자에게ALTER ROUTINE
및EXECUTE
권한을 부여합니다. 저장된 루틴 권한도 참조하십시오.,
DEFINER
과 SQL 보안 절 보안 컨텍스트를 지정합 tobe 을 확인할 때 사용한 액세스 권한을 루틴에서 수행 시간,asdescribed 니다. 수퍼 권한 또는 MariaDB10.5.2 에서 설정된 사용자 권한이 필요합니다.
경우에는 일상적인 이름이 동일한 이름으로 내장 SQLfunction 사용해야 합니다 사이에 공백이 이름과 followingparenthesis 를 정의할 때 일상적인,또는 구문 오류가 발생합니다. 나중에 루틴을 호출 할 때도 마찬가지입니다., 이러한 이유로,wesuggest 는 것을 방지하는 것이 좋습니다 다시 이름을 사용하여 기존의 SQLfunctions 에 대한 당신의 자신의 저장합니다.
IGNORE_SPACE SQL 모드는 storedroutines 가 아닌 내장 함수에 적용됩니다. IGNORE_SPACE 가 활성화되었는지 여부에 관계없이 항상 루틴 이름 뒤에 공백을 가질 수 있습니다.
괄호 안에 묶인 매개 변수 목록이 항상 있어야합니다.매개 변수가없는 경우()의 빈 매개 변수 목록을 사용해야합니다. 매개 변수 이름은 대/소문자를 구분하지 않습니다.,
각 매개 변수를 선언할 수 있습을 사용하여 모든 유효한 데이터 유형을 제외하고는 대조 특성을 사용할 수 없습니다.
프로시저 이름으로 사용할 유효한 식별자는 식별자 이름을 참조하십시오.
IN/OUT/INOUT
각 매개 변수는 기본적으로IN
매개 변수입니다. 을 지정하지 않포 매개 변수를 사용하여 키워드OUT
또는INOUT
기 전에 매개 변수 이름.
AnIN
매개 변수는 프로 시저에 값을 전달합니다., 프로 시저가 값을 mightmodify 하지만 프로 시저가 반환 될 때 수정이 호출자에게 표시되지 않습니다. OUT
매개 변수는 theprocedure 의 값을 호출자에게 다시 전달합니다. 초기 값은 procedure 내에서 NULL 이며 procedurereturns 때 호출자에게 해당 값이 표시됩니다. 는INOUT
매개 변수 초기화에 의해 호출할 수 있도록 수정 절차에 의해,그리고 어떤 변화에 의해 만들어진 절차 isvisible 하자면 절차를 반환합니다.,
각OUT
또는INOUT
매개 변수는,통행하는 사용자 정의 변수를CALL
문을 호출하는 절차를 얻을 수 있도록 itsvalue 면 절차를 반환합니다. 는 경우 호출하 procedurefrom 내에서 다른 저장 프로시저 또는 기능을 전달할 수도 있습 aroutine 매개 변수 또는 지역의 일상적인 변수로는IN
또는INOUT
매개 변수입니다.
결정/비결정
DETERMINISTIC
및NOT DETERMINISTIC
함수에만 적용됩니다., 을 지정하는DETERMINISTC
또는NON-DETERMINISTIC
에서는 절차를 효과가 없습니다. 기본값은NOT DETERMINISTIC
입니다. 함수는 항상 동일한 입력에 대해 동일한 값을 반환 할 때DETERMINISTIC
입니다. 예를 들어 잘림 또는 하위 문자열 함수입니다. 따라서 데이터와 관련된 모든 함수는 항상NOT DETERMINISTIC
입니다.,
포함 SQL/SQL/읽기 SQL 데이터/수정 SQL 데이터
CONTAINS SQL
,NO SQL
,READS SQL DATA
,andMODIFIES SQL DATA
는 유익한 조항을 알려주는 서버가 어떤 기능 않습니다. MariaDB 는 지정된 절이 올바른지 어떤 식 으로든 확인하지 않습니다. 이러한 절 중 어느 것도 지정되지 않은 경우CONTAINS SQL
가 기본적으로 사용됩니다.
MODIFIES SQL DATA
는 기능이 포함되는 문장 수정할 수 있습니다 데이터를 데이터베이스에 저장됩니다., 함수에 DELETE,UPDATE,INSERT,REPLACE 또는 DDL 과 같은 명령문이 포함 된 경우 발생합니다.
READS SQL DATA
는 기능을 읽기 데이터를 데이터베이스에 저장하지 않지만,수정하는 데이터입니다. 이것은 SELECT 문이 사용되지만 쓰기 작업이 실행되지 않는 경우에 발생합니다.
CONTAINS SQL
는 기능을 포함하는 적어도 하나 SQL 문지만,그것을 읽거나 쓰는 모든 데이터베이스에 저장됩니다. 예를 들면 SET or DO 가 있습니다.,MariaDB 는 현재 SQL 이외의 언어를 지원하지 않기 때문에
NO SQL
는 아무 의미도 없습니다.
routine_body 는 유효한 SQL 프로 시저 문으로 구성됩니다. 이것은 SELECT 또는 INSERT 와 같은 간단한 명령문이거나 BEGIN 및 END 를 사용하여 작성된 acompound 명령문 일 수 있습니다. 복합 statement 에는 선언,루프 및 기타 제어 structurestatements 가 포함될 수 있습니다. 구문 세부 사항은 프로그래밍 방식 및 복합 문을 참조하십시오.
MariaDB 는 루틴이CREATE
andDROP 과 같은 DDL 문을 포함하도록 허용합니다., MariaDB 는 또한 저장 프로 시저(저장되지 않은 함수)가COMMIT
와 같은 SQL 트랜잭션 문을 포함하도록 허용합니다.
instored 루틴이 허용되지 않는 문에 대한 추가 정보는 저장된 루틴 제한을 참조하십시오.
를 호출하여 저장된 절차에서 내에서 프로그램
에 대한 정보를 호출하여 저장된 절차에서 내에서 프로그램 언어로 작성 있는 MariaDB/MySQL 인터페이스는 호출을 참조하십시오.
또는
MariaDB 를 10.1 부터 대체하십시오.,3
경우 선택적인OR REPLACE
절을 사용하는 역할을 수행에 대한 바로 가기
DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;
제외하고는 모든 기존의 권한 절차를 위해 삭제되지 않습니다.
sql_mode
MariaDB 저장 sql_mode 시스템 변수 설정에 사용되는 시간 일상적인 만들,그리고 항상 실행하고 일상적인 이 설정과 함께 힘에 관계없이 서버의 SQL 모드에 있을 때 효력이 일상적인 호출됩니다.
캐릭터 설정 및 데이터 정렬
절차를 매개 변수를 선언할 수 있습와 캐릭터 설정/정렬., 문자 집합과 데이터 정렬이 특별히 설정되지 않은 경우 생성 시 데이터베이스 기본값이 사용됩니다. 는 경우에 데이터베이스의 기본값 변경후 단계에서,저장 프로시저는 캐릭터 설정/정렬 변경되지 않는다는 것은 동시에 저장된 절차를 요구를 삭제하거나 재작성하도록 동일한 캐릭터 설정/정렬 데이터베이스로 사용됩니다.
Oracle Mode
MariaDB10.3 부터 MariaDB10.3 에서 Oracle 의 PL/SQL 언어의 하위 집합은 전통적인 SQL/PSM 기반 MariaDB 구문 외에도 지원되었습니다., Oracle mode 실행 시 변경 사항에 대한 자세한 내용은 MariaDB10.3 의 Oracle mode 를 참조하십시오.
예
다음 예제에서는 간단한 저장 프로시저를 사용하는OUT
매개 변수입니다. 그것을 사용하여 구분 기호를 설정하는 명령을 새로운 구분 기호의 기간 동안 과정—시 구분 기호에서 mysql 클라이언트입니다.,
캐릭터 설정 및 정렬:
를 만들거나 교체:
see
- 식별자 이름
- 저장 프로시저를 개요
- 변경 절차
- 드롭 절차
- SHOW CREATE 절차
- 쇼 절차의 상태
- 저장 일상적인 권한을
- 정보 스키마틴 테이블