2015-01-09 2 views
0

Можно ли установить переменную в оператор insert в хранимой процедуре?mysql insert statement как переменная

Что-то вроде:

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 «s результат (изменяемые строки), вы можете использовать ROW_COUNT() ,

ROW_COUNT() возвращает количество строк изменен, удален или вставлен последним оператором, если он был UPDATE, 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