powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выполнить скрипт
119 сообщений из 119, показаны все 5 страниц
Выполнить скрипт
    #38995624
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, просьба сильно не пинать я новичек. Пытаюсь выполнить скрипт в IBExpert. Запуская SQL EDITOR. Сам скрипт
CREATE DOMAIN D_DATE AS DATE;
CREATE DOMAIN D_INTEGER AS INTEGER;
CREATE DOMAIN D_CHAR1 AS CHAR(1);
CREATE DOMAIN D_CHAR2 AS CHAR(2);
CREATE DOMAIN D_CHAR3 AS CHAR(3);
CREATE DOMAIN D_CHAR4 AS CHAR(4);

COMMIT;

После второй строчки выдает синтаксическую ошибку.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995626
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXCREATE DOMAIN D_DATE AS DATE;
......
COMMIT;

После второй строчки выдает синтаксическую ошибку.

- в IBE для скриптов - есть специализированный редактор.
- commit - после каждого DDL вsражения добавь
- текст ошибки привести тоже не мешает
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995639
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXЗапуская SQL EDITOR.Запускай в Script Executive (Ctrl+F12)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995650
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster- commit - после каждого DDL вsражения добавьВ данном случае - это не нужный и даже вредный совет
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995664
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dennis-redw_XXXЗапуская SQL EDITOR.Запускай в Script Executive (Ctrl+F12)
ТОже не получилось запустить
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995667
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasteredw_XXXCREATE DOMAIN D_DATE AS DATE;
......
COMMIT;

После второй строчки выдает синтаксическую ошибку.

- в IBE для скриптов - есть специализированный редактор.
- commit - после каждого DDL вsражения добавь
- текст ошибки привести тоже не мешает


Текст ошибки

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 1.
CREATE.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995678
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXX,

Не там запускаешь скрипт...
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995680
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladDarkMaster- commit - после каждого DDL вsражения добавьВ данном случае - это не нужный и даже вредный совет

А чем может навредить?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995717
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterВ данном случае - это не нужный и даже вредный совет

А чем может навредить?[/quote]Тормозами. Представь себе скрипт апгрейда БД не на 5 строк, а на 5К строк...
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995725
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasteredw_XXX,

Не там запускаешь скрипт...

ctrl+F12
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995728
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Согласен, поспешил. Но не думаю, что у него 5К пользовательских доменов...
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995750
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так и в итоге как правильно то поступить? просто как залить скрипт)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995824
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXтак и в итоге как правильно то поступить?
Если не в состоянии осилить IBExpert, используй isql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995902
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterА чем может навредить?
Уже навредил. 1-я строка закоммитилась (вручную, видимо), и скрипт целиком уже не перезапустить.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995979
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovedw_XXXтак и в итоге как правильно то поступить?
Если не в состоянии осилить IBExpert, используй isql.

не ну sql editor я запусить могу) и скопипастить скрипт. Просто не понятно в чем проблема (
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995989
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Edw Xxx!
You wrote on 30 июня 2015 г. 14:15:35:

Edw Xxx> Просто не понятно в чем проблема (
поясняю для тупых (и особо одарённых тоже).
разработчик IBExpert создал два раздельных окошка,
в которых могут выполняться SQL-команды.
одно из окошек он нарёк SQL-editor'ом и позволил оному
исполнять только одиночные SQL-команды,
в том числе SQL-запросы возвращающие набор данных.
другое же окошко нарёк он Script Executive и дозволено было оному
исполнять пакеты SQL-команд пачками,
за исключением запросов возвращающих наборы данных.
компрене ву?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995991
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXПросто не понятно в чем проблема (
В том, что в SQL Editor нельзя выполнять скрипты. Разве это не очевидно?..

А isql - утилита специально предназначенная для выполнения скриптов, ничего другого она не
умеет, так что и запутаться негде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38995994
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXDimitry Sibiryakovпропущено...

Если не в состоянии осилить IBExpert, используй isql.

не ну sql editor я запусить могу) и скопипастить скрипт. Просто не понятно в чем проблема (

Не sql editor, а редактор скриптов. Уже несколько раз сказано.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996111
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решилась запуском скрипта из консоли isql, скрипт залился без проблем. С ibexpert так и не заработал.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996113
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если человек идиот, то это надолго...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996131
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийесли человек идиот, то это надолго...

Почему оскорбляете? Возможно проблема в клиентcкой библиотеке ibexpert. База крутится на удаленной машине под linux. Скрипт сработал именно в консоли на linux.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996137
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Edw Xxx!
You wrote on 30 июня 2015 г. 16:30:55:

Edw Xxx> Возможно проблема в клиентcкой библиотеке
ibexpert . нет такой клиентской библиотеки.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996145
ZeroMQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXМимопроходящийесли человек идиот, то это надолго...

Почему оскорбляете? Возможно проблема в клиентcкой библиотеке ibexpert. База крутится на удаленной машине под linux. Скрипт сработал именно в консоли на linux.

Криворукие линуксоиды.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996150
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZeroMQedw_XXXпропущено...

Почему оскорбляете? Возможно проблема в клиентcкой библиотеке ibexpert. База крутится на удаленной машине под linux. Скрипт сработал именно в консоли на linux.

Криворукие линуксоиды.

Дык ibexpert стоит на винде. Походу тут спецы на ветке не кислые, если ibexpert работает без библиотеки
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996153
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXX,

Синтаксическая ошибка во второй строке (читай — после точки с запятой) однозначно указывает, что вы пытаетесь копипастить скрипт в не предназначенное для него окно. Об этом вам сказали в первом же ответном сообщении и повторяли много раз. Клиентская библиотека тут ни при чём, без неё вы бы даже не подключились к БД.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996164
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понял про разницу SQL Editor и Script Executive. Но я пытался запускать скрипт из Script Executive. Он не сработал все равно. Повторяю сработал только из под isql
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996211
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXX,

"не сработал" - не бывает. Всегда пишется сообщение об ошибке.
Ошибка
"Token unknown - line 2, char 1.
CREATE."

из SQL Editor, он выполняет только по одной команде за раз. Script Execitive - выполняет много команд. В окне Script Executive нужно указать, в каком ОТКРЫТОМ соединении к БД нужно этот скрипт выполнять, если в самом скрипте нет первой команды connect.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996486
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В любом случае спасибо за разъяснения.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996522
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXX,

на самом деле эта ошибка скорее всего произошла из-за того что в первой строке у тебя разделителя команд (;) не было. Например вот такой скрипт даёт в точности такую ошибку как у тебя

Код: sql
1.
2.
create table a(b int)
create domain d_int int;
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996724
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисedw_XXX,

на самом деле эта ошибка скорее всего произошла из-за того что в первой строке у тебя разделителя команд (;) не было. Например вот такой скрипт даёт в точности такую ошибку как у тебя

Код: sql
1.
2.
create table a(b int)
create domain d_int int;



нет , выдает ошибку Сannot perform operation -- DB is not open
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996731
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сори кажется нашел проблему ) Use current connection поставил галочку
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996732
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXX,визуализирую
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996735
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXСори кажется нашел проблему ) Use current connection поставил галочку
Как долго мы тебя лечили....
Вот же выше по тексту Дима говорил -> http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1163742&msg=17834032
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996739
edw_XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gallemaredw_XXXСори кажется нашел проблему ) Use current connection поставил галочку
Как долго мы тебя лечили....
Вот же выше по тексту Дима говорил -> http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1163742&msg=17834032
Я новичек )
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996743
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edw_XXXЯ новичек )
Изучай https://yadi.sk/i/LpsYBf1PbxPF7
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996747
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Код: sql
1.
2.
3.
4.
5.
execute block as
begin
  create table a(b int);
  create domain d_int int;
end


Почему нельзя одним блоком пульнуть создание БД, без всяких скриптов?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996764
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

потому что DDL не выполняется в рамках PSQL. Точнее выполнить можно, но тебе лучше не знать как.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996785
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Дениспотому что DDL не выполняется в рамках PSQL.
Выполняется:
Код: sql
1.
2.
3.
4.
5.
execute block as
begin
  execute statement 'create table a(b int)';
  execute statement 'create domain d_int int';
end
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996787
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

ну вот так и делай у себя. Только другим не советуй. Удачи в написании скриптов execute block для обновления своих баз.
Особенно весело будет создавать ХП через execute statement в которых строковые литералы есть. А уж если ещё перемешать с DML статментами вообще весело будет.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996789
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

Не, ну вот зачем глотать бильярдный шар?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996790
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов ДенисТочнее выполнить можно, но тебе лучше не знать как.
Это вы меня потроллить чтоли решили? Не надо :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996797
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

не надо советовать новичкам execute statement, когда не нужно, а то начнёт его лепить во все щели. А виноват кто будет? Посоветовавший.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996800
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денис-,

ну вот так и делай у себя. Только другим не советуй. Удачи в написании скриптов execute block для обновления своих баз.
Особенно весело будет создавать ХП через execute statement в которых строковые литералы есть. А уж если ещё перемешать с DML статментами вообще весело будет.
Я ничего не советую. Я удивился что оно не работает. Вы объяснили почему. Я вам показал что ваше объяснение не катит.
Дальше вот эти ваши фантазии с весельем создавать ХП через execute statement.
Ко мне какие претензии? Я наврал где-то? Или приукрасил? Или ввёл в заблуждение?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996810
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

оно и в Оракле не работает. Есть конечно СУБД где такое катит.

Я вот сомневаюсь что через ES можно выполнить хотя бы два DDL оператора подряд между которыми есть хоть какая-нибудь зависимость.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996811
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, мынус!
You wrote on 1 июля 2015 г. 13:06:26:

мынус> Ко мне какие претензии? Я наврал где-то? Или приукрасил?
> Или ввёл взаблуждение?усохни, промокашко.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996812
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

второе моё предложение как раз и касалось execute statement. А вы его зачем-то показали.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996820
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денисне надо советовать новичкам execute statement, когда не нужно, а то начнёт его лепить во все щели. А виноват кто будет? Посоветовавший.
Я не советовал. Я лишь показал вам пример опровергающий ваш тезис.
И вообще, если я о чём-нибудь спрошу, то большая просьба - выдавайте мне всю инфу по максимуму. Не нужно меня оберегать и на основании своих опасений и фантазий лишать меня инфы которую я прошу. А то я буду на основании своих опасений тоже лишать вас чего-нибудь :) И кто будет виноват? Я буду виноват, т.к. я лишаю вас инфы.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996825
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов ДенисЯ вот сомневаюсь что через ES можно выполнить хотя бы два DDL оператора подряд между которыми есть хоть какая-нибудь зависимость.
Тогда бы это был баг.
Но слава богу этого бага нет:
Код: sql
1.
2.
3.
4.
5.
6.
execute block as
begin
  execute statement 'create table a(b int)';
  execute statement 'alter table a add f int';
  execute statement 'drop table a';
end
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996833
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

я не вас оберегаю, а новичка который задал вопрос. Хотя наверное моё второе предложение нужно было не тебе адресовать.

Теперь по поводу почему в блоке нельзя. В FB изменения метаданных применяется по завершению транзакции. Поэтому когда мешаешь DDL с DML в одной транзакции операторы DML могут не увидеть изменения метаданных. execute block это DML оператор внутри которого исполняется PSQL код. Поскольку вот здесь можно написать и так

Код: sql
1.
2.
3.
4.
5.
6.
execute block as
begin
  create table a(b int);
  create domain d_int int;
  insert into a(b) values(1);
end



то проще вообще не исполнять внутри execute block любые DDL операторы. Через execute statement есть дырка, но если там же выполнить ещё и DML операторы, то можно очень не кисло огрести.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996845
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисто проще вообще не исполнять внутри execute block любые DDL операторы. Через execute statement есть дырка, но если там же выполнить ещё и DML операторы, то можно очень не кисло огрести.

Попытка :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
execute block
as
begin
  execute statement 'create domain d_my_int2 integer';
  execute statement 'create table test0003(id d_my_int2)';
  execute statement 'insert into test0003 (id) values (123)';
end



Приводит к:
Код: plaintext
1.
2.
3.
4.
5.
Undefined name.
Dynamic SQL Error.
SQL error code = -204.
Table unknown.
TEST0003.
At line 1, column 13.

С автономными транзакциями можно конечно более извращенно поизмываться, вот только занафига?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996853
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

я думаю тоже не помогут. Потому что если DDL ты выполнил в автономке, а DML в основной транзакции, то кеш метаданных загружен на момент старта основной транзакции (или на момент старта блока), где таблички ещё нет. Поэтому я и говорю через ES конечно можно выполнить DDL, но тогда уж только его.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996854
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денис
Код: sql
1.
2.
3.
4.
5.
6.
execute block as
begin
  create table a(b int);
  create domain d_int int;
  insert into a(b) values(1);
end


Это же можно написать без execute block, просто в одной транзакции с клиента. Результат полагаю должен быть одинаковым. И там и там человек меняющий DDL таблицы и меняющий её данные обречён на неудачу. А кому нужен только DDL или только DML, тем придётся:
- в случае с DML: написать один execute block или слать по одному запросу.
- в случае с DDL: написать один execute block c execute statements или слать по одному запросу.
Так что ничто не запрещено. Просто парсер в excute block не понимает DDL без execute statement. Всё.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996861
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

не просто не понимает. Его туда умышлено не вводили из-за глюков которые однозначно будут.
С клиента тебе тоже придётся сделать 1 или более DDL операторов затем подтвердить транзакцию, а только потом делать DML уже в другой транзакции.
Просто в редакторе скриптов IBE или в ISQL для DDL по умолчанию стартуется отдельная транзакция которая по завершении оператора тут же завершается.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996926
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов ДенисС клиента тебе тоже придётся сделать 1 или более DDL операторов затем подтвердить транзакцию, а только потом делать DML уже в другой транзакции.
Ничто не мешает создать табличку A, и в той же транзакции сделать запись в табличку B, которая от A никак не зависит.
Но опять же - это не то что интересно.
Интересно пачкой выполнять именно DDL. Интерес в простоте работы со скриптами.
Допустим скрипт лежит в файле. Как его сейчас применить например из кода Delphi? Нужно распарсить на стэйтменты. Для этого нужен парсер SQL, и не абы какой, а именно для FB нужной версии. Это сейчас.
А как это делается в одну строчку, если бы в execute block не запретили DDL?
вот так, например:
Код: pascal
1.
Transaction.ExecuteSql('EXECUTE BLOCK AS'#13#10'BEGIN'#13#10 + LoadFile(ScriptFile) + #13#10'END')

Всё.
Хотя если там в скрипте где-то есть "commit;", то кода получится лишь немногим больше, и опять же без парсенья SQL.

Так что кто-то своим запретом малину всем портит :) Понятно что из благородных целей - с целью заботы о гражданах :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996949
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Допустим скрипт лежит в файле. Как его сейчас применить например из кода Delphi? Нужно распарсить на стэйтменты. Для этого нужен парсер SQL, и не абы какой, а именно для FB нужной версии.

Выдыхай...
Код: pascal
1.
2.
  SQLScript.LoadFromFile(....);
  SQLScript.Execute;
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996955
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

блин я такой парсер даже на PHP писал. Ничего там сложного нет. Ибо парсить команды до основания не надо. Достаточно найти разделить ну и чуть посложней повозиться с SET TERM, а также с игнором разделителей в строках и комментах. Причём это мало зависит от версии сервера.

Вот сделать это без SET TERM чуть сложнее. Там как раз зависимость от версии может проявится. Ибо в FB3 есть CREATE/ALTER PACKAGE/FUNCTION которых в 2.5 не было. Но тоже можно, в IBE ведь сделали.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996958
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- Нужно распарсить на стэйтменты. Для этого нужен парсер SQL, и не абы какой, а именно для FB нужной версии.
никакой парсер не нужен. Достаточно из потока текста выколупывать конструкции между разделителем N, который по умолчанию ";", и меняется по set term. Никаких других конструкций кроме set term распознавать не надо, вообще.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996959
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

строки и комменты ещё надо, чтобы игнорировать разделители в них
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38996966
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvникакой парсер не нужен. Достаточно из потока текста выколупывать конструкции между разделителем N, который по умолчанию ";", и меняется по set term. Никаких других конструкций кроме set term распознавать не надо, вообще.

Кроме SET TERM есть еще кучка SET'ов, а также CONNECT/CREATE DATABASE.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997003
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
DarkMaster-Допустим скрипт лежит в файле. Как его сейчас применить например из кода Delphi? Нужно распарсить на стэйтменты. Для этого нужен парсер SQL, и не абы какой, а именно для FB нужной версии.

Выдыхай...
Код: pascal
1.
2.
  SQLScript.LoadFromFile(....);
  SQLScript.Execute;


SQLScript - это что?
Вот такой скрипт, сгенерённый IBExpert-ом он поймёт?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
/******************************************************************************/
/***                               Generators                               ***/
/******************************************************************************/

CREATE GENERATOR GEN_T_ID;
SET GENERATOR GEN_T_ID TO 0;

/******************************************************************************/
/***                           Stored procedures                            ***/
/******************************************************************************/

SET TERM ^ ;

CREATE PROCEDURE P
RETURNS (
    ID INTEGER,
    S VARCHAR(10))
AS
BEGIN
  SUSPEND;
END^

SET TERM ; ^

/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/

CREATE TABLE T (
    ID  INTEGER NOT NULL,
    S   VARCHAR(10)
);

/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/

SET TERM ^ ;

/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/

/* Trigger: T_BI */
CREATE TRIGGER T_BI FOR T
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_t_id,1);
end
^

SET TERM ; ^

/******************************************************************************/
/***                           Stored procedures                            ***/
/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE P
RETURNS (
    ID INTEGER,
    S VARCHAR(10))
AS
begin
  for select id, s from t into :id, :s do
    suspend;
end^

SET TERM ; ^


А тот же самый, но без SET TERM-ов он распарсит?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
/******************************************************************************/
/***                               Generators                               ***/
/******************************************************************************/

CREATE GENERATOR GEN_T_ID;
SET GENERATOR GEN_T_ID TO 0;

/******************************************************************************/
/***                           Stored procedures                            ***/
/******************************************************************************/

CREATE PROCEDURE P
RETURNS (
    ID INTEGER,
    S VARCHAR(10))
AS
BEGIN
  SUSPEND;
END;

/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/

CREATE TABLE T (
    ID  INTEGER NOT NULL,
    S   VARCHAR(10)
);

/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);

/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/

/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/

/* Trigger: T_BI */
CREATE TRIGGER T_BI FOR T
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_t_id,1);
end;

/******************************************************************************/
/***                           Stored procedures                            ***/
/******************************************************************************/

ALTER PROCEDURE P
RETURNS (
    ID INTEGER,
    S VARCHAR(10))
AS
begin
  for select id, s from t into :id, :s do
    suspend;
end;

А если сюда добавить конструкций из FB 4.0?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997012
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-А если сюда добавить конструкций из FB 4.0?

Где взял?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997013
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
балабол
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997024
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SQLScript - это что?
Вот такой скрипт, сгенерённый IBExpert-ом он поймёт?
А тот же самый, но без SET TERM-ов он распарсит?
А если сюда добавить конструкций из FB 4.0?

- TIB_Script от ИБО - внутри есть парсер - его хватает за глаза (и парсер не особо навороченный, кстати)
- Поймет
- будет FB 4.0 - поймет и его ;)

[sarcasm on]

P.S. Вот правда если скрипт разбавить конструкциями от Oracle вперемешку с MSSQL - то да, облом выйдет ;(
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997025
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денис-А если сюда добавить конструкций из FB 4.0?

Где взял?
Зачем ты меня троллишь таким вопросом? 4.0 если выйдет, то там наверняка будут новые языковые конструкции.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997054
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

блин что там сложного то?

Есть несколько типов команд:
1. SET TERM переключает терминатор (работает с незапамятных времён)
2. операторы в которых нет операторных скобок BEGIN...END. Таких большинство
3. операторы с операторными скобками CREATE/ALTER PROCEDURE/FUNCTION/PACKAGE/TRIGGER + EXECUTE BLOCK
4. спец команды, не являющиеся операторами CONNECT, SET DIALECT ... их надо обрабатывать отдельно

Так вот весьма высока вероятность что в новой версии появятся команды из группы 2. Для них вообще ничего переделывать не придётся.

Очень мала что из группы 3. Если работаем через SET TERM то и для них переделывать не придётся.

Группы 1 и 4 не являются частью операторов FB, а являются расширениями конкретного клиента исполняющего скрипт. Поэтому на них пофиг. Можешь им сам синтаксис придумать любой.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997066
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
DarkMaster - TIB_Script от ИБО - внутри есть парсер - его хватает за глаза (и парсер не особо навороченный, кстати)
Ну тогда дай ссылку, чтобы мы все смогли осчастливиться :)
Хотя смотрю что продукт платный, и разработчик является членом Firebird Foundation и все дела.

Так что можно обойти отсутствие запрещённого функционала у FB, просто покупкой этого функционала у члена Firebird Foundation.
Что-то меня понесло не туда... Или наоборот туда.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997068
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денисблин что там сложного то?

Есть несколько типов команд:
1. SET TERM переключает терминатор (работает с незапамятных времён)
C SET TERM вообще никаких проблем нет. С ним всё просто. Но он не часть языка.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997075
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Так что можно обойти отсутствие запрещённого функционала у FB, просто покупкой этого функционала у члена Firebird Foundation.


Дык тут все просто - качаешь исходники FB с запрещенным функционалом, выдираешь оттуда запрещенный парсер, адаптируешь под свои нужды, получаешь НЕзапрещенный парсер, раздаешь всем и каждому - профит.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997099
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис4. спец команды, не являющиеся операторами CONNECT, SET DIALECT ... их надо обрабатывать отдельно
дискуссия начинает уходить в космос, потому что исходно "минус" сказал про "как выполнить скрипт обновления своей БД из Дельфи".
Так что база своя, connect не нужен, set dialect не нужен, и никакой другой set кроме term не нужен.

-C SET TERM вообще никаких проблем нет. С ним всё просто. Но он не часть языка.
правильно. Это конструкция ISQL. А ISQL что, парсит конструкции DML/DDL Firebird? Хрен там!
Вы просто API не знаете. Достаточно "выкусить" оператор из разделителей, вызвать prepare, и получить, что это - DML (вплоть до select/insert/update/delete...) или DDL.

Прекратите валять дурака. для парсинга скрипта никаких специфических конструкций языка знать не нужно.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997110
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to all

какой-то апофеоз. Firebird не умеет выполнять скрипты. Он умеет выполнять единичные операторы. Firebird так устроен.
isql - может выполнять скрипты, разделяя скрипт на отдельные операторы. isql не умеет выполнять DDL/DML, потому что из выполняет Firebird. Аминь. ISQL не является Firebird-ом, и наоборот.

Пусть еще кто-нибудь скажет, что ISQL от Firebird 1.5 не умеет выполнять скрипты для Firebird 3.0 ...
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997113
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТак что база своя, connect не нужен, set dialect не нужен, и никакой другой set
кроме term не нужен.
set term тоже нафиг не нужен. У меня разделитель, например, гвоздиком прибит в значение "^".

kdvдля парсинга скрипта никаких специфических конструкций языка знать не нужно.
Как минимум две конструкции знать нужно: delimited литералы и комментарии. Остальное
действительно пофиг. "Это я тебе, голуба, говорю как краевед." (с) ЛФ
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997125
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
-
Код: sql
1.
2.
3.
4.
5.
execute block as
begin
  create table a(b int);
  create domain d_int int;
end


Почему нельзя одним блоком пульнуть создание БД, без всяких скриптов?
Оно вам не нужно. Вам нужно выполнять стейтменты по одному, или воспользоваться чужим кодом который парсит скрипт и дальше выполняет стэйтменты по одному. Вот как вам нужно. Я лучше знаю.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997134
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

если оно будет выполняться с глюками, то действительно не нужно. Я уж лучше через isql выполню скрипт. Да, да в виде тех отдельных статментов с разбитых по разделителю.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997137
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovset term тоже нафиг не нужен. У меня разделитель, например, гвоздиком прибит в значение "^".


Если гвоздиком прибить что-нибудь вроде "===!!!-----@@THIS_IS_TERMINATOR@@-----!!!===", то и литералы с комментариями пофигу будут :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997138
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
kdvкакой-то апофеоз. Firebird не умеет выполнять скрипты. Он умеет выполнять единичные операторы. Firebird так устроен.
Вот. А еще Firebird умеет выполнять execute block. Но не умеет выполнять в нём DDL. Верней умеет, и корректно, но только через execute statement.
Собственно это ядро беседы которую я начал и которая мне на самом деле интересна и полезна. И даже код на Delphi привёл, как было бы просто если бы execute block не ленился и выполнял DDL.
Но собеседники цепляются за частности и уводят действительно в космос.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997139
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-execute block. Но не умеет выполнять в нём DDL. Верней умеет, и корректно, но только через execute statement.
я бы счел это дырой. еще раз спрошу - вы знаете, как isql выполняет DDL в режиме set autoddl, например?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997143
Фотография кац алапый мишько
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv-execute block. Но не умеет выполнять в нём DDL. Верней умеет, и корректно, но только через execute statement.
я бы счел это дырой. еще раз спрошу - вы знаете, как isql выполняет DDL в режиме set autoddl, например?не знаю и знать не хочу
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997146
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кац алапый мишьконе знаю и знать не хочу
ну и нафиг. просто некоторые тут хотят чтобы им вообще все рассказали.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997149
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kdv!
You wrote on 1 июля 2015 г. 17:50:53:

Kdv> ну и нафиг. просто некоторые тут хотят чтобы им вообще все
рассказали.не понимаю я вас, граждане.
тупое тро-ло-ло ходит на форум развлекаться, а вы вокруг него политэсы
хороводом водите.
идёт оно в нах!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997159
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
kdvвы знаете, как isql выполняет DDL в режиме set autoddl, например?
Нет.
У себя в приложении я создаю пустую базу и потом в одной транзакции делаю несколько сотен DDL-стэйтментов (таблицы, процедуры, триггеры). Потом в следующей транзакции заливаю данные. И в ещё одной транзакции создаю констрейнты и индексы (тоже несколько сотен).
С точки зрения скорости был бы рад поместить DDL-стэйтменты первого и третьего шагов в два execute block.
А потом быть может вынес бы первый и третий блоки в отдельные файлы.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997162
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

(затаив дыхание)

Кхм. А обновление структуры базы в уже работающих инсталляциях как происходит?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997163
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

а вот в оракле все DDL статменты автоматически оборачиваются транзакциями. Причём получается что один статмент одна транзакция. И ничего особо не орут.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997169
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисв оракле все DDL статменты автоматически оборачиваются транзакциями
Поэтому у них нет проблем со смешиванием DDL и DML в одной транзакции: оно просто невозможно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997171
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Мимопроходящийне понимаю я вас, граждане.
тупое тро-ло-ло ходит на форум развлекаться, а вы вокруг него политэсы
хороводом водите.
идёт оно в нах!

Мимопроходящий, я спрашиваю вещи которые мне интересны. И вроде в спокойном конструктивном ключе.
Вы похоже что-то своё видите, чего я вовсе не пишу или не подразумеваю.
Если же у вас есть что-то конкретное к моим высказываниям, то я прошу вас указать это так чтобы мне было понятно на что вы так реагируете, чтобы у меня хотя бы был шанс осознать косяк и больше так не делать.
Я вижу что вас цепляет периодически, но не могу уловить что именно цепляет.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997173
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-И вроде в спокойном конструктивном ключе.
Ага, щаззз жо...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997179
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-> Собственно это ядро беседы которую я начал и которая мне на самом деле интересна и полезна.
-> Но собеседники цепляются за частности и уводят действительно в космос.

Угомонись уже, пока по-хорошему просят.
И зарегистрируйся, наконец.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997180
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
miwaonlineА обновление структуры базы в уже работающих инсталляциях как происходит?
При старте смотрится номер версии структуры в БД и она обновляется до нужной. Обычно по транзакции на версию. Иногда приходится в одной версии делать несколько транзакций, когда нужно и структуру и данные изменить. Говорю "приходится", потому что операция по сути атомарной должна быть, и заканчиваться увеличением номером версии и коммитом, но FB не умеет в одной транзакции DDL и DML по одной таблице. Косяк, но ничего не поделаешь.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997182
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, мынус!
You wrote on 1 июля 2015 г. 18:35:50:

мынус> FB не умеет в одной транзакции DDL и DML по одной таблице.
> Косяк, но ничего не поделаешь.
и Оракл не умеет в одной транзакции DDL и DML по одной таблице.
и DB2 не умеет в одной транзакции DDL и DML по одной таблице.
косяк, но ничего не поделаешь.
его курить нужно.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997186
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Косяк, но ничего не поделаешь.
нет в жизни счастья.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997194
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Дениса вот в оракле все DDL статменты автоматически оборачиваются транзакциями. Причём получается что один статмент одна транзакция. И ничего особо не орут.
Да как бы можно вообще без транзакций жить. У меня был опыт работы в конторе на ADS, где таблицы на десятки миллионов записей в месяц и никаких транзакций, и даже FK нет. Производство и бухгалтерия. Высоконагруженное. Как они жили?
Так что можно всяко.
Вы кстати опять на Oracle пальцем показываете как на авторитет. Я только логики не понимаю. Мало ли у кого где косяки. Нам вроде как свои косяки должны быть интересны. Зачем прятать свои косяки чужими? Типа на их фоне не так заметно? :) Вобщем если вы поясните ваше аппелирование к Oracle, то я возможно стану понимать вас лучше :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997199
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-При старте смотрится номер версии структуры в БД и она обновляется до нужной. Обычно по транзакции на версию.
Я еще разок уточню - как именно "обновляется"? Откуда комманды для обновления берутся?

По-другому сформулирую. Я правильно понимаю, что в программе есть много-много вшитых строк со всякими dml/ddl и весь этот плач Ярославны касается их правильного наката из программы в базу?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997204
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline> в программе есть много-много вшитых строк со всякими dml/ddl

Ну шож ты совсем-то плохо о них думаешь?
Наверное, в файлике(ах) рядом где-нибудь лежат.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997206
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамmiwaonline> в программе есть много-много вшитых строк со всякими dml/ddl

Ну шож ты совсем-то плохо о них думаешь?
Наверное, в файлике(ах) рядом где-нибудь лежат.
Перечитывая топик, я уже не знаю, что думать :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997208
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Мимопроходящийи Оракл не умеет в одной транзакции DDL и DML по одной таблице.
и DB2 не умеет в одной транзакции DDL и DML по одной таблице.
Как их написали, так они и работают.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997211
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
kdv-Косяк, но ничего не поделаешь.
нет в жизни счастья.
Нет чтобы сказать: "да, слушай, действительно тут было бы удобно атомарно" :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997219
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-С точки зрения скорости был бы рад поместить DDL-стэйтменты первого и третьего шагов в два execute block.
Это ж насколько там суровые DDL-стэйтменты, что на пустой базе они выполняются так долго, что их взжелается ускорить?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997225
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Нет чтобы сказать: "да, слушай, действительно тут было бы удобно атомарно" :)

Сказать так, конечно, можно, а толку-то? Я вот, например, даже примерно представляю как
это можно сделать. Но объём работы таков, что заниматься ею ради такого мизерного выхлопа
как "удобство", лично у меня нет ни малейшего желания. А у тебя?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997230
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

понимаешь ли там это косяком никто не считает. Почему мы должны?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997239
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
miwaonline-При старте смотрится номер версии структуры в БД и она обновляется до нужной. Обычно по транзакции на версию.
Я еще разок уточню - как именно "обновляется"? Откуда комманды для обновления берутся?

По-другому сформулирую. Я правильно понимаю, что в программе есть много-много вшитых строк со всякими dml/ddl и весь этот плач Ярославны касается их правильного наката из программы в базу?
Не правильно вы понимаете. Вообще разговор не про мою программу.
Я не очень сейчас понимаю куда я попал и в какую роль меня пытаются поставить.
Тут форум по FB. Тут кроме пользователей тусуются разработчики, которым, как я полагаю небезинтересен Firebird. Небезинтересен с моей точки зрения он им по следующим направлениям:
- правка багов
- развитие функционала
- удобство использования
- общая здоровая ситуация в community

Так вот, видя что пришёл человек с конкретной задачей (см. первый пост топика), и что ему в качестве решения предлагается выполнить скрипт в IBE, и у него не сразу получилось т.к. он новичок, я подумал: "а почему никто не предлагает execute block? Это же естественно, просто, и прям то что нужно пользователю". А оказыватся у execute block есть нюанс. Для меня ясно как божий день, что если бы этого нюанса не было, то куча пользователей с подобными вопросами была бы "happy". Я решил что нужно бы обратить внимание на этот нюанс и что его отсутствие было бы желательным для пользователей. В ответ получил то что получил. И это уже не в первый раз.
Вот так это с моей точки зрения выглядит.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997244
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, мынус!
You wrote on 1 июля 2015 г. 19:40:40:

мынус> Вот так это с моей точки зрения выглядит.
на тебя торжественно возложен нефритовый жезл.

зы: усохни, промокашка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997254
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-я подумал: "а почему никто не предлагает execute block? Это же естественно,
просто, и прям то что нужно пользователю".
Хренасе понятие о "естественности". isql - вот это естественно. А EB с ES внутри это
натуральная проктостоматология.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997260
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- ... т.к. он новичок , я подумал: "а почему никто не предлагает execute block? Это же естественно, просто, и прям то что нужно пользователю".
вот поэтому и не предлагали
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997263
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

не предлагали потому, что знали что не работает. А вот предлагать то что не работает как то неправильно. Не считаешь?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997268
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Dimitry Sibiryakov-Нет чтобы сказать: "да, слушай, действительно тут было бы удобно атомарно" :)

Сказать так, конечно, можно, а толку-то? Я вот, например, даже примерно представляю как
это можно сделать. Но объём работы таков, что заниматься ею ради такого мизерного выхлопа
как "удобство", лично у меня нет ни малейшего желания. А у тебя?

Плюсы - не мой родной. И есть ощущение что я не смогу придерживаться шаблонов мышления которыми люди оперировали когда писали код 30 лет назад. Так что если я возьмусь, то получится отдельная ветка FB, из которой в результате будет выкинут весь мусор и код кторой будет переработан под мои внутренние стандарты, которые подразумевают 100% владение кодом, т.е возможность его изменения в любом направлении со 100% пониманием результатов таких изменений.
Так что я не вариант :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997271
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

ну ладно попробую объяснить по другому.

Код: sql
1.
2.
3.
4.
5.
execute block as
begin
  create table a(b int);
  insert into a(b) values(1);
end



как известно execute block это анонимный PSQL блок, т.е. хранимая процедура которая не хранится.
Т.е. это должно быть эквивалентно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure p1 
as
begin
  create table a(b int);
  insert into a(b) values(1);
end

execute procedure p1;

drop procedure p1;



Теперь вспоминаем, что ХП в FB это не просто тупой кусок интерпретируемого кода. Что она компилируется в промежуточный язык BLR, который собственно и исполняется при вызове. Во время компиляции процедура проверяет правильность записанного в ней кода, в том числе и то что все объекты используемые в ней существуют. Так вот эта процедура не скомпилируется, если в ней производятся манипуляции с объектом метаданных которого не существует.

execute block хоть нигде не хранится, но проходит тот же самый путь. Когда мы его препарируем появляется BLR (т.е как бы происходит компиляция на лету), который собственно и исполняется. Так понятней?
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997273
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Dimitry SibiryakovХренасе понятие о "естественности". isql - вот это естественно.
Новичкам обычно не удобно что старичкам естественно :)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997276
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денис
Вижу косяк, да.
Вообще беседа оказалась поучительной.
И то что я не увидел почему так делать нельзя мне говорит о многом.
И то что другие не указали на этот косяк, т.к. видимо просто его не осознали пока Денис не написал (но кто сейчас в этом признается?) - это тоже мне говорит о многом.
Спасибо всем за этот опыт.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997282
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да закройте уже этот цирк одного актера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997285
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

если честно, то поначалу мне показалось что ты нас тут тролишь, поэтому с тобой так резко и говорили. Ну теперь, то я понимаю, что ты просто не въезжаешь в тему.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997292
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис-,

ну ладно попробую объяснить по другому.

Этот пример я приводил ровно 2 страницы флейма назад :-)
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997295
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денисесли честно, то поначалу мне показалось что ты нас тут тролишь, поэтому с тобой так резко и говорили. Ну теперь, то я понимаю, что ты просто не въезжаешь в тему.
Я никогда не троллю, как бы кому этого не виделось и не хотелось. Так что если вдруг увидите что я похоже "вот тут" троллю, то просто уточните у меня правильно ли я понимаю то, о чём говорю в "том месте" где вам кажется я троллю.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997296
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
DarkMasterСимонов Денис-,

ну ладно попробую объяснить по другому.

Этот пример я приводил ровно 2 страницы флейма назад :-)
Если вы про этот 17837663 пример, то он совсем про другое.
Денис говорит про принципиальную некомпилябельность стэйтмента потому как таблицы A нет на момент компиляции, а у вас пример про невыполнимость интсерта потому как таблицы нет на момент запуска.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997337
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

Найди 2 отличия :-) Пример демонстрирует ровно одно и то же.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997339
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

не совсем. При использовании execute statement внутри execute block не проверяется существования объектов метаданных на этапе компиляции/препарирования. Только в момент исполнения.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997350
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Угу, согласен...

P.S. А такое прокатывает...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
execute block
returns (id integer)
as
begin
  in autonomous transaction do
     execute statement 'create table test0002(id integer)';
  in autonomous transaction do
     execute statement 'insert into test0002(id) values (1)';
end
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997610
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я бы сильно удивился, если б не прокатило
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997633
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Гаджимурадов Рустам!
You wrote on 2 июля 2015 г. 11:49:43:

Гаджимурадов Рустам> Да закройте уже этот цирк одного актера.+500!
кловун не смешной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997931
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterА такое прокатывает...
потому что это работает так же, как set autoddl в isql.
...
Рейтинг: 0 / 0
Выполнить скрипт
    #38997955
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvDarkMasterА такое прокатывает...
потому что это работает так же, как set autoddl в isql.

Та это я к тому, что с автономками можно наворотить всякого...ненужного ;)
...
Рейтинг: 0 / 0
119 сообщений из 119, показаны все 5 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выполнить скрипт
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]