Я пытаюсь создать хранимую процедуру с использованием PHP. Мое чтение указывает на лучший способ сделать это, запустив файл .sql, используя команду «exec» в PHP.создать mysql хранимую процедуру из файла
В ходе тестирования я создал файл с именем amtv3_create_routines.sql с этим содержимым:
DELIMITER //
DROP PROCEDURE IF EXISTS createTc //
CREATE PROCEDURE createTc()
BEGIN
drop table if exists v3_tc;
CREATE TABLE v3_tc (
source BIGINT UNSIGNED NOT NULL ,
dest BIGINT UNSIGNED NOT NULL ,
PRIMARY KEY (source, dest))
ENGINE = InnoDB;
insert into v3_tc (source, dest)
select distinct rel.sourceid, rel.destinationid
from rf2_ss_relationships rel inner join rf2_ss_concepts con
on rel.sourceid = con.id and con.active = 1
where rel.typeid = (select distinct conceptid from rf2_ss_descriptions where term = 'is a')
and rel.active = 1;
REPEAT
insert into v3_tc (source, dest)
select distinct b.source, a.dest
from v3_tc a
join v3_tc b on a.source = b.dest
left join v3_tc c on c.source = b.source and c.dest = a.dest
where c.source is null;
set @x = row_count();
select concat('Inserted ', @x);
UNTIL @x = 0 END REPEAT;
create index idx_v3_tc_source on v3_tc (source);
create index idx_v3_tc_dest on v3_tc (dest);
END //
DELIMITER;
Этот код прекрасно работает, когда я вручную ввести его в MySQL 5.6.22 Однако если сохранить файл и из командной строки введите команду.
mysql -uroot -p -hlocalhost amtv3 < [full path]/amtv3_create_routines.sql
Я попытался сохранить файл, используя кодировку utf8 и кодировку Windows 1252.
Из командной строки обратной связи нет, и процедура не создается. В PHP я использую frameworkignign framework. Если я использую метод db->query
, я могу создать хранимую процедуру, однако база данных теряет соединение. выдача $db->reconnect()
работает, но не надежно.
Любые предложения по созданию хранимой процедуры?
Вам нужно указать базу данных, в которой вы хотите сохранить процедуру. –
Я использую базу данных amtv3 в командной строке. Я также выпустил использование amtv3; в файле. оба не работают. – pgee70