|
Каталог статей
Запрос из нескольких баз стредствами SQL Firebird
Решил проработать этот вопрос и всё-таки сделать один запрос. Итак, воспользоваться в этом случае можно конструкцией FOR EXECUTE STATEMENT
Конструкция его такова: [FOR] EXECUTE STATEMENT { | : } [ () ] [ON EXTERNAL [DATA SOURCE] ] [WITH { AUTONOMOUS | COMMON } TRANSACTION] [AS USER [PASSWORD ] ] [WITH CALLER PRIVILEGES] [INTO : [,: [,] ] ] [DO ;]
Подробности в статье http://firebirdsql.su/doku.php?id=execute_statement
Пример практического кода:
execute block (fam1 varchar(50)=:fam1 ,im1 varchar(50)=:im1,ot1 varchar(50)=:ot1,dr1 date=:dr1) returns (fam varchar(50), im varchar(50),ot varchar(50),dr date,nnpo varchar(50),nstr varchar(50), house varchar(50),flat varchar(50),polis varchar(50),smo varchar(50),dred date,namebase varchar(50),uid integer) as declare variable strsql varchar(1000); begin strsql=',patient.uid,patient.fam, patient.im, patient.ot, patient.dr, n_npo.nnpo, n_str.nstr, patient.house, patient.flat, patient.polis, n_cmo.ncmo, patient.dred from patient inner join n_npo on patient.tawn=n_npo.npo inner join n_str on patient.street=n_str.str inner join n_cmo on patient.cmo=n_cmo.cmo where patient.fam='||chr(39)||:fam1||chr(39)|| ' and patient.im='||chr(39)||:im1||chr(39)|| ' and patient.ot='||chr(39)||:ot1||chr(39)||' and patient.dr='||chr(39)||:dr1||chr(39)||' order by dred'; FOR EXECUTE STATEMENT ('select '||chr(39)||'Стационар'||chr(39)||:strsql) ON EXTERNAL DATA SOURCE '100.200.4.54:d:\ametist\db\ametist.GDB' AS USER 'sysdba' PASSWORD 'masterkey' INTO :namebase,:uid,:fam,im,ot,dr,nnpo,nstr,house,flat,polis,smo,dred DO SUSPEND; FOR EXECUTE STATEMENT ('select '||chr(39)||'Поликлиника №2'||chr(39)||:strsql) ON EXTERNAL DATA SOURCE '100.200.4.28:c:\PROGRAM FILES\ARENA\DB\ARENA.GDB' AS USER 'sysdba' PASSWORD 'masterkey'
/*... тут идут подобные блоки*/ FOR EXECUTE STATEMENT ('select '||chr(39)||'АТО №2'||chr(39)||:strsql) ON EXTERNAL DATA SOURCE '100.200.2.4:c:\PROGRAM FILES\ARENA\DB\ARENA.GDB' AS USER 'sysdba' PASSWORD 'masterkey' INTO :namebase,:uid,:fam,im,ot,dr,nnpo,nstr,house,flat,polis,smo,dred DO SUSPEND; WHEN ANY do begin end end
Ну а дальше можно сделать хранимую процедуру для удобства использования
|
Категория: Секреты программирования | Добавил: Admin5895 (02.07.2015)
|
Просмотров: 681
| Рейтинг: 5.0/1 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|