Loading...
MySQL 9.5 Reference Manual 9.5의 A.4 MySQL 9.5 FAQ: Stored Procedures and Functions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
A.4.1. MySQL은 stored procedures와 functions를 지원합니까?
A.4.2. MySQL stored procedures와 stored functions에 대한 documentation은 어디에서 찾을 수 있습니까?
A.4.3. MySQL stored procedures를 위한 discussion forum이 있습니까?
A.4.4. stored procedures에 대한 ANSI SQL 2003 specification은 어디에서 찾을 수 있습니까?
A.4.5. stored routines는 어떻게 관리합니까?
A.4.6. 특정 database 내의 모든 stored procedures와 stored functions를 볼 수 있는 방법이 있습니까?
A.4.7. stored procedures는 어디에 저장됩니까?
A.4.8. stored procedures나 stored functions를 packages로 묶을 수 있습니까?
A.4.9. stored procedure가 다른 stored procedure를 호출할 수 있습니까?
A.4.10. stored procedure가 trigger를 호출할 수 있습니까?
A.4.11. stored procedure가 tables에 접근할 수 있습니까?
A.4.12. stored procedures에 application errors를 발생시키는 statement가 있습니까?
A.4.13. stored procedures가 exception handling을 제공합니까?
A.4.14. MySQL stored routines가 result sets를 반환할 수 있습니까?
A.4.15. stored procedures에 대해 WITH RECOMPILE이 지원됩니까?
A.4.16. database의 stored procedure와 직접 통신하기 위해 Apache에서 gateway로 mod_plsql을 사용하는 것과 동등한 MySQL 기능이 있습니까?
A.4.17. array를 stored procedure에 input으로 전달할 수 있습니까?
A.4.18. IN parameter로 cursor를 stored procedure에 전달할 수 있습니까?
A.4.19. stored procedure에서 OUT parameter로 cursor를 반환할 수 있습니까?
A.4.20. debugging 목적을 위해 stored routine 내에서 variable 값의 값을 출력할 수 있습니까?
A.4.21. stored procedure 내에서 transactions를 commit하거나 roll back할 수 있습니까?
A.4.22. MySQL stored procedures와 functions가 replication과 함께 동작합니까?
A.4.23. replication source server에서 생성된 stored procedures와 functions가 replica로 replicated됩니까?
A.4.24. stored procedures와 functions 내부에서 발생하는 actions는 어떻게 replicated됩니까?
A.4.25. replication과 함께 stored procedures와 functions를 사용할 때 특별한 security 요구 사항이 있습니까?
A.4.26. stored procedure와 function actions를 replicating하는 데 어떤 limitations가 존재합니까?
A.4.27. 앞서 언급한 limitations가 MySQL의 point-in-time recovery 수행 능력에 영향을 줍니까?
A.4.28. 위에서 언급한 limitations를 수정하기 위해 무엇이 진행되고 있습니까?
| Property | Value |
|---|---|
| A.4.1. | MySQL은 stored procedures와 functions를 지원합니까? |
| 예. MySQL은 두 종류의 저장 루틴, 즉 stored procedures와 stored functions를 지원합니다. | |
| A.4.2. | MySQL stored procedures와 stored functions에 대한 documentation은 어디에서 찾을 수 있습니까? |
| Section 27.2, “Using Stored Routines”을 참조하십시오. | |
| A.4.3. | MySQL stored procedures를 위한 discussion forum이 있습니까? |
| 예. https://forums.mysql.com/list.php?98을 참조하십시오. | |
| A.4.4. | stored procedures에 대한 ANSI SQL 2003 specification은 어디에서 찾을 수 있습니까? |
| 안타깝게도, 공식 specification은 자유롭게 이용할 수 없습니다 (ANSI가 이를 구매용으로 제공합니다). 그러나 Peter Gulutzan과 Trudy Pelzer가 저술한 SQL-99 Complete, Really 와 같은 책들이 있으며, 이 책들은 stored procedures에 대한 내용까지 포함하여 표준을 포괄적으로 개요합니다. | |
| A.4.5. | stored routines는 어떻게 관리합니까? |
| stored routines에 대해 명확한 이름 지정 체계를 사용하는 것은 항상 좋은 모범 사례입니다. stored procedures는 `CREATE [FUNCTION | |
| A.4.6. | 특정 database 내의 모든 stored procedures와 stored functions를 볼 수 있는 방법이 있습니까? |
예. _dbname_이라는 데이터베이스의 경우,<br>이 쿼리를 INFORMATION_SCHEMA.ROUTINES 테이블에 대해 사용하십시오:<br><br>```sql | |
| SELECT ROUTINE_TYPE, ROUTINE_NAME |
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA='dbname';
```<br>자세한 내용은 Section 28.3.36, “The INFORMATION_SCHEMA ROUTINES Table”을 참조하십시오.<br><br>stored routine의 본문은 stored function의 경우 SHOW CREATE FUNCTION, stored procedure의 경우 SHOW CREATE PROCEDURE를 사용하여 볼 수 있습니다. 자세한 내용은 Section 15.7.7.11, “SHOW CREATE PROCEDURE Statement”을 참조하십시오. |
| A.4.7. | stored procedures는 어디에 저장됩니까? |
| | stored procedures는 데이터 딕셔너리의 일부인 mysql.routines 및 mysql.parameters 테이블에 저장됩니다. 이러한 테이블에 직접 접근할 수는 없습니다. 대신 INFORMATION_SCHEMA의 ROUTINES 및 PARAMETERS 테이블을 쿼리하십시오. Section 28.3.36, “The INFORMATION_SCHEMA ROUTINES Table” 및 Section 28.3.25, “The INFORMATION_SCHEMA PARAMETERS Table”을 참조하십시오.<br><br>또한 stored functions에 대한 정보를 얻기 위해 SHOW CREATE FUNCTION을 사용할 수 있고, stored procedures에 대한 정보를 얻기 위해 SHOW CREATE PROCEDURE를 사용할 수 있습니다. Section 15.7.7.11, “SHOW CREATE PROCEDURE Statement”을 참조하십시오. |
| A.4.8. | stored procedures나 stored functions를 packages로 묶을 수 있습니까? |
| | 아니요. 이는 MySQL에서 지원되지 않습니다. |
| A.4.9. | stored procedure가 다른 stored procedure를 호출할 수 있습니까? |
| | 예. |
| A.4.10. | stored procedure가 trigger를 호출할 수 있습니까? |
| | stored procedure는 UPDATE와 같은 SQL 문을 실행하여 trigger가 활성화되게 할 수 있습니다. |
| A.4.11. | stored procedure가 tables에 접근할 수 있습니까? |
| | 예. stored procedure는 필요에 따라 하나 이상의 테이블에 접근할 수 있습니다. |
| A.4.12. | stored procedures에 application errors를 발생시키는 statement가 있습니까? |
| | 예. MySQL은 SQL 표준 SIGNAL 및 RESIGNAL 문을 구현합니다. Section 15.6.7, “Condition Handling”을 참조하십시오. |
| A.4.13. | stored procedures가 exception handling을 제공합니까? |
| | MySQL은 SQL 표준에 따라 HANDLER 정의를 구현합니다. 자세한 내용은 Section 15.6.7.2, “DECLARE ... HANDLER Statement”을 참조하십시오. |
| A.4.14. | MySQL stored routines가 result sets를 반환할 수 있습니까? |
| | _Stored procedures_는 가능하지만 stored functions는 불가능합니다. stored procedure 내부에서 일반적인 SELECT를 수행하면, 결과 집합은 클라이언트로 직접 반환됩니다. 이를 위해서는 MySQL 4.1 (또는 그 이상) 클라이언트/서버 프로토콜을 사용해야 합니다. 예를 들어 PHP의 경우, 예전 mysql 확장이 아닌 mysqli 확장을 사용해야 합니다. |
| A.4.15. | stored procedures에 대해 WITH RECOMPILE이 지원됩니까? |
| | 아니요. |
| A.4.16. | database의 stored procedure와 직접 통신하기 위해 Apache에서 gateway로 mod_plsql을 사용하는 것과 동등한 MySQL 기능이 있습니까? |
| | MySQL에는 이에 상응하는 기능이 없습니다. |
| A.4.17. | array를 stored procedure에 input으로 전달할 수 있습니까? |
| | 아니요. |
| A.4.18. | cursor를 IN parameter로 stored procedure에 전달할 수 있습니까? |
| | 커서는 stored procedures 내부에서만 사용할 수 있습니다. |
| A.4.19. | stored procedure에서 OUT parameter로 cursor를 반환할 수 있습니까? |
| | 커서는 stored procedures 내부에서만 사용할 수 있습니다. 그러나 SELECT에 대해 커서를 열지 않으면, 결과는 클라이언트로 직접 전송됩니다. 또한 SELECT INTO로 변수에 값을 대입할 수도 있습니다. Section 15.2.13, “SELECT Statement”을 참조하십시오. |
| A.4.20. | debugging 목적을 위해 stored routine 내에서 variable 값의 값을 출력할 수 있습니까? |
| | 예, 이는 _stored procedure_에서는 가능하지만 stored function에서는 불가능합니다. stored procedure 내부에서 일반적인 SELECT를 수행하면, 결과 집합은 클라이언트로 직접 반환됩니다. 이를 위해서는 MySQL 4.1 (또는 그 이상) 클라이언트/서버 프로토콜을 사용해야 합니다. 예를 들어 PHP의 경우, 예전 mysql 확장이 아닌 mysqli 확장을 사용해야 합니다. |
| A.4.21. | stored procedure 내에서 transactions를 commit하거나 roll back할 수 있습니까? |
| | 예. 그러나 stored function 내에서는 트랜잭션 작업을 수행할 수 없습니다. |
| A.4.22. | MySQL stored procedures와 functions가 replication과 함께 동작합니까? |
| | 예, stored procedures와 functions에서 수행되는 표준 작업은 복제 소스 서버에서 레플리카로 복제됩니다. 몇 가지 제한 사항이 있으며, 이는 Section 27.9, “Stored Program Binary Logging”에서 자세히 설명합니다. |
| A.4.23. | replication source server에서 생성된 stored procedures와 functions가 replica로 replicated됩니까? |
| | 예, 복제 소스 서버에서 일반적인 DDL 문을 통해 수행된 stored procedures와 functions의 생성은 레플리카로 복제되어, 객체가 두 서버 모두에 존재하게 됩니다. stored procedures와 functions에 대한 ALTER 및 DROP 문도 복제됩니다. |
| A.4.24. | stored procedures와 functions 내부에서 발생하는 actions는 어떻게 replicated됩니까? |
| | MySQL은 stored procedure에서 발생하는 각 DML 이벤트를 기록하고, 이러한 개별 작업을 레플리카로 복제합니다. stored procedures를 실행하기 위해 수행된 실제 호출은 복제되지 않습니다.<br><br>데이터를 변경하는 stored functions는 각 function 내부에서 발생하는 DML 이벤트가 아니라 function 호출로 로깅됩니다. |
| A.4.25. | replication과 함께 stored procedures와 functions를 사용할 때 특별한 security 요구 사항이 있습니까? |
| | 예. 레플리카는 소스의 바이너리 로그에서 읽은 어떤 문장이든 실행할 권한이 있으므로, 복제에서 stored functions를 사용할 때에는 특별한 보안 제약이 존재합니다. 복제 또는 일반적인 바이너리 로깅 (point-in-time 복구 목적)이 활성화된 경우, MySQL DBA에게는 두 가지 보안 옵션이 있습니다:<br>1. stored functions를 생성하려는 모든 사용자에게 SUPER 권한을 부여합니다.<br><br>2. 또는 DBA는 시스템 변수 log_bin_trust_function_creators를 1로 설정하여, 표준 CREATE ROUTINE 권한만 가진 사용자도 stored functions를 생성할 수 있도록 할 수 있습니다. |
| A.4.26. | stored procedure와 function actions를 replicating하는 데 어떤 limitations가 존재합니까? |
| | stored procedures에 포함된 비결정적(random) 또는 시간 기반 작업은 올바르게 복제되지 않을 수 있습니다. 본질적으로 무작위로 생성된 결과는 예측이 불가능하고 정확히 재생산될 수 없으므로, 레플리카로 복제된 random 작업은 소스에서 수행된 것과 동일하게 반영되지 않습니다. stored functions를 DETERMINISTIC으로 선언하거나 시스템 변수 log_bin_trust_function_creators를 0으로 설정하면 random 연산이 무작위 값을 생성하는 function 호출이 되지 않도록 할 수 있습니다.<br><br>또한 시간 기반 작업은 stored procedure 내에서의 이러한 작업의 타이밍이 복제에 사용되는 바이너리 로그를 통해 재생산될 수 없기 때문에 레플리카에서 재생산될 수 없습니다. 바이너리 로그는 DML 이벤트만 기록하며 타이밍 제약은 반영하지 않습니다.<br><br>마지막으로, 대규모 DML 작업(예: 대량 삽입) 동안 오류가 발생하는 비트랜잭션 테이블의 경우, 복제 문제를 겪을 수 있습니다. 즉, 소스는 DML 작업에 의해 부분적으로 업데이트될 수 있지만, 발생한 오류로 인해 레플리카에는 어떤 업데이트도 수행되지 않을 수 있습니다. 이러한 문제에 대한 해결책으로는 function의 DML 작업을 IGNORE 키워드와 함께 수행하여, 소스에서 오류를 유발하는 업데이트는 무시하고 오류를 유발하지 않는 업데이트만 레플리카로 복제되도록 하는 방법이 있습니다. |
| A.4.27. | 앞서 언급한 limitations가 MySQL의 point-in-time recovery 수행 능력에 영향을 줍니까? |
| | 복제에 영향을 미치는 것과 동일한 제한 사항이 point-in-time 복구에도 영향을 미칩니다. |
| A.4.28. | 위에서 언급한 limitations를 수정하기 위해 무엇이 진행되고 있습니까? |
| | statement-based replication 또는 row-based replication 중에서 선택할 수 있습니다. 원래 복제 구현은 문장 기반 바이너리 로깅을 기반으로 합니다. 행 기반 바이너리 로깅은 앞에서 언급한 제한 사항을 해결합니다.<br><br>mixed replication도 사용할 수 있습니다 (서버를 --binlog-format=mixed 옵션과 함께 시작함으로써). 이 하이브리드 형태의 복제는 문장 수준 복제를 안전하게 사용할 수 있는지, 아니면 행 수준 복제가 필요한지를 “판단”합니다.<br><br>추가 정보는 Section 19.2.1, “Replication Formats”을 참조하십시오. |
A.3 MySQL 9.5 FAQ: Server SQL Mode
A.5 MySQL 9.5 FAQ: Triggers