2013-02-19 15 views
1

저장 프로 시저에 문제가 있습니다 (MySQL). 레코드가 존재하는 경우 테이블의 데이터 업데이트 프로세스가 필요합니다. 그렇지 않으면 레코드를 삽입하십시오. 나는 가지고있다 :저장 프로 시저로 삽입 및 업데이트

DELIMITER // 

CREATE PROCEDURE saveorUpdate(in product varchar(30), price int, stock int, active varchar(5)) 

BEGIN 

DECLARE id int; 

SELECT id_pro FROM products WHERE product=product into id; 

IF(id_pro=id)THEN 

UPDATE products SET product=product, price=price, stock=stock, active=active 
WHERE id_pro=id; 

ELSE 

INSERT INTO products (product, price, stock, active) VALUES 
(product, price, stock, active); 

END IF; 
END 

어떤 아이디어?

+0

왜 저장 프로 시저를 사용합니까? REPLACE ... INTO ... 문을 사용하여 단일 SQL로이 조작을 수행 할 수 있습니다. 이 경우 기본 키 열을 기반으로 바꿔야합니다. – Minesh

+0

이 그것을 수행하는 방법으로 보일 것입니다. –

답변

4

데이터베이스가 MySQL이기 때문에 을 INSERT INTO ... ON DUPLICATE KEY 구문을 사용하고 저장 프로 시저 항목을 스크랩 할 수 있습니다.

INSERT INTO products (
    product, price, stock, active 
) VALUES (
    $product, $price, $stock, $active 
) ON DUPLICATE KEY UPDATE 
    product=VALUES(product) 
, price=VALUES(price) 
, stock=VALUES(stock) 
, active=VALUES(active) 

아이디어 만 있습니다. 더 깨끗하고 빠른 대안을 쓸 수 있습니다. 중복에 INSERT, UPDATE와 저장 프로 시저 - 여기

0

을하는 데 도움이

희망이 질문에 대한 대답입니다.

CREATE DEFINER=`root`@`localhost` PROCEDURE `manage-business` 
(IN `bname` VARCHAR(200)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER 
INSERT INTO tbl_company (co_name) VALUES (bname) ON DUPLICATE key UPDATE co_name=bname; 
관련 문제