2014-01-17 2 views
1

인벤토리 관리 프로그램을 위해 만든 MYSQL 프로 시저가 있습니다. 나는 다른 생성자에 대해 다른 이름을 가진 두 번째 프로 시저를 생성하여 내 자신 만의 문제를 쉽게 해결할 수있었습니다. 내 질문은 "클래스의 생성자로 프로그래밍 할 때와 다른 방법으로 여러 변수를 프로 시저에 전달할 경우 프로 시저를 처리하는 프로 시저의 선언 내에 별도의 명령 집합을 정의하는 방법이 있습니까?MYSQL 프로 시저의 다중 생성자

내 현재 프로 시저 :

DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `addorderitem`(ord decimal,prod decimal, quant decimal) 
BEGIN 
DECLARE sale decimal; 
SET sale = (SELECT saleprice FROM assessor.products WHERE idProducts=prod); 
SET SQL_SAFE_UPDATES=0; 
INSERT INTO orderitems (OrderNumber, idProducts, quantity, saleprice) VALUES (ord, prod, quant, sale); 
END 

절차는 제품 테이블에서 기본 판매 가격을 검색, 주문 항목의 테이블에 주문의 개별 라인을 추가하는 두 번째 생성자는 절차를 처리하는 데 사용된다. 대신 생성자가 판매 가격을 제공하는 경우

도움을 주셔서 미리 감사드립니다.

스티븐 콜맨 헤일로 미디어 기술

+0

왜 응용 프로그램 대신 데이터베이스에서이 모든 작업을 수행하고 있습니까? 이 수준의 저장 프로 시저 활용도를 가진 응용 프로그램은 유지 관리가 매우 어렵습니다. – tadman

답변

0

질문에 대한 대답은 '예,하지만 당신은 가능성이 과정에서 문자열로 쿼리를 형성하고 실행하는 PREPARE and EXECUTE를 사용해야 할 것입니다.

쿼리의 일부를 상수 스칼라 값이 아닌 변수로 바꾸려면이 작업이 필요합니다.

저장 프로 시저에서 동적 SQL을 사용하면 올바르게 처리 할 수 ​​있습니다. 당신의 동기는 프로 시저를 코드화하는 것이 더 편리하도록하는 것이지만, 동적 SQL을 사용한다고해서 코딩이나 디버깅이 쉬워지지는 않는다는 것을 알려드립니다. 또한 성능에 좋지 않으며 SQL 인젝션의 위험을 감지하여 탐지하기가 어려울 수 있습니다.

사실 드문 경우를 제외하고는 MySQL에서 저장 프로 시저를 사용하지 않는 것이 좋습니다. 그들은 개발하기가 어렵고, 디버그하기가 어려우며, 성능상의 문제가 있습니다. Oracle이나 Microsoft SQL Server와 같은 다른 RDBMS 브랜드에서 프로 시저를 사용하는 것에 익숙해 질 수 있지만 MySQL의 저장 프로 시저 구현은 다른 브랜드에 비해 원시적이고 비효율적이라는 것을 알아야합니다.

관련 문제