2011-10-27 2 views
0

Mysql을 처음 사용했습니다. 제품의 가격을 업데이트하는 저장 프로 시저를 만들고 싶습니다. jdbc를 사용하여이 저장 프로 시저를 구현했습니다. 그러나 저장 프로 시저 명령이 여러 번 실패했습니다. 다음은 mysql 코드이다. "p"는 제품을 의미하고 "des"는 가격의 하락을 의미하며 "pro"는 제품 이름을 의미합니다. Java의 CallableStatement는 제품의 가격과 그에 대한 감소를 제공합니다. 따라서 저장 프로 시저가 해당 제품의 가격을 낮 춥니 다.Mysql 명령이 저장 프로 시저를 구현할 수 없습니다.

`CREATE PROCEDURE updateP(IN pro CHAR(10), IN des INT)` 
` 
BEGIN` 
    UPDATE customers 
    `DECLARE p INT;` 
    `SET p = (SELECT price FROM customers WHERE product= pro);` 
    `SELECT p;` 
    `p = p - des;` 
END 
+0

저장 프로 시저가 적합하지 않습니다. 1. 당신은 customers라는 테이블에서 가격을 선택하고있다. (맞습니까?) 2.'p = p-des'는'CHAR'에서 수행 된 모든 연산입니다. 여러분이 빼기를 원하면 숫자 값을 만들어야합니다 . 3. 나는 당신이 어떤 시점에서 테이블을 업데이트하고 어디서나'update' 문을 보지 않는다고 가정합니다. 조금 더 나은 목표를 명확히하십시오. – Icarus

+0

회신을위한 Thx입니다. 고객이 테이블이고 가격이 테이블의 속성입니다. – user1015798

답변

0

나는 이것이 당신이 필요로하는 모든 생각 : 매개 변수로 전달의 감소 금액으로 현재 가격을 감소해야

DELIMITER $ 

CREATE PROCEDURE updateP(IN pro CHAR(10), IN des INT) 

BEGIN 
    UPDATE customers 
    SET price = price-des 
    WHERE product= pro; 

END$ 

DELIMITER ; 

.

제안 사항 중 하나는 다음과 같습니다. updatePsprocUpdateProduct 또는 UpdateProduct_sp과 같은 전체 이름을 사용하십시오. 내일 인원을 업데이트해야 할 경우 updatePPerson 또는 Product으로 업데이트되는지 더 이상 알 수 없습니다. 변수에 대해서도 마찬가지이며, 전체 이름을 사용합니다.

+0

thx,하지만 세미콜론을 추가해야합니까? – user1015798

+0

@ user1015798'Where' 절 다음에 세미콜론을 추가했습니다. 솔직히 말해 MySQL에 저장된 proc 파일을 작성하지 않았으므로 6 년이 넘었지만 기억하는 한 세미콜론 만 있으면됩니다. 여기 다른 누군가가 확인할 수 있습니까? – Icarus

+0

@Icarus 세미콜론이 필요합니다. 스크립트의 일부로 프로 시저 코드 전후에 세미콜론 이외의 다른 것으로 구분 기호를 설정하는 것을 잊지 마십시오. 나는 너의 포스트를 시도하고 편집 할 것이다. –

관련 문제