2015-01-09 5 views
0

저장 프로 시저의 insert 문에 변수를 설정할 수 있습니까?mysql insert 문을 변수로 사용

set variable1 = insert into table(field1, field2, field3) values(val1, val2, variable2); 

이 그렇다면, 어떻게 기록해야합니다 같은

뭔가?

오류가 계속 발생하고 문서를 작성하는 것이 결정적입니다.

내가 간결 거라고하지만, 전체 절차는 따라서이다 :

-- -------------------------------------------------------------------------------- 
-- Routine DDL 
-- Note: comments before and after the routine body will not be stored by the server 
-- -------------------------------------------------------------------------------- 
DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `new_accession`(in barcode int, in accepted varchar(11), in wt float(11,2), in wtunit varchar(3),in draw date, in chist varchar(256), in ghist varchar(256), in meds varchar(256), in diffdiag varchar(256),in diseasesus varchar(256),in volume int, in facility int, in patient int, in employ int, in compromised int, in receiving int, in test int) 
BEGIN 
declare accessionId int; 
declare accessionTest int; 
declare tkInsert varchar(256); 
declare hptInsert varchar(256); 
declare calInsert varchar(256); 
declare pthInsert varchar(256); 
declare vitdtkInsert varchar(256); 
declare cnpInsert varchar(256); 

if wtunit = 'lb' then set wt = convertLbKg(wt); 
end if; 

INSERT INTO accession(barcode_accession,accepted_accession,weight_accession,req_weight_units,draw_date_accession,cancer_history_accession,general_history_accession,medication_accession,differential_diagnosis_accession,disease_suspect_accession,volume_accession,facility_doctor_index_id_facility_doctor_index,patient_id_patient,employee_id_employee,accession_compromised_id_accession_compromised,receiving_id,accession_typeof_id_accession_typeof) 
VALUES (barcode,accepted,wt,wtunit,draw,chist,ghist,meds,diffdiag,diseasesus,volume,facility,patient,employ,compromised,receiving,1); 

set accessionId = last_insert_id(); 

set tkInsert = insert into pending(accession_facility_index,reagent_type,`status`)values(accessionId,1,'Pending'); 
set hptInsert = insert into pending(accession_facility_index,reagent_type,`status`)values(accessionId,2,'Pending'); 
set calInsert = insert into pending(accession_facility_index,reagent_type,`status`)values(accessionId,3,'Pending'); 
set pthInsert = insert into pending(accession_facility_index,reagent_type,`status`)values(accessionId,4,'Pending'); 

if test = 1 then tkInsert,calInsert; 
elseif test =2 the hptInsert,pthInsert; 
else pthInsert; 
end if; 


END 
+1

당신이 변수로 설정 될 것으로 예상합니까? INSERT는 결과 집합을 반환하지 않습니다. – Barmar

+0

원본 질문을 전체 저장 프로 시저로 업데이트했습니다. 조금 복잡 하긴하지만 아이디어를 얻는다고 생각합니다. – kevincicero

+0

쿼리 결과를 저장하거나 쿼리를 실행하는 프로 시저를 정의 하시겠습니까? – didierc

답변

1

당신이 원하는 것을 명확하지 않지만 당신의 목표는 (영향을받는 행) insert의 결과를 저장하는 경우 ROW_COUNT()을 사용할 수 있습니다 . 행의 수를 반환

ROW_COUNT는()는 DELETE 또는 INSERT, 대한 업데이트 인 경우 삭제, 또는 마지막 문 삽입, 변경.
다른 명령문의 경우 값이 의미가 없을 수 있습니다. 예를 들어

:

variable1 = (select ROW_COUNT());

0

난 당신이 prepared statements을 찾고 생각합니다.

PREPARE tkInsert FROM CONCAT("insert into pending(accession_facility_index,reagent_type,`status`)values(?, 1,'Pending')"; 

그럼 당신은 그것을 실행합니다

EXECUTE tkInsert USING accessionId; 
+0

준비된 쿼리는 프로 시저 또는 함수와 같은 보편적 인 쿼리입니까? – kevincicero

관련 문제