2014-12-16 4 views
0

Я пытаюсь создать хранимую процедуру с использованием 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() работает, но не надежно.

Любые предложения по созданию хранимой процедуры?

+0

Вам нужно указать базу данных, в которой вы хотите сохранить процедуру. –

+0

Я использую базу данных amtv3 в командной строке. Я также выпустил использование amtv3; в файле. оба не работают. – pgee70

ответ

0

Опуская пробел в последней строке, DELIMITER; должно приводить к синтаксической ошибке (может быть, есть и другая причина, по которой эта ошибка не печатается).