powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Стандарты SQL и Файрберд
49 сообщений из 49, показаны все 2 страниц
Стандарты SQL и Файрберд
    #38586751
Samotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvSamotekЕще один фактик в копилку, спасибо!

все уже давно в копилке
http://www.ibase.ru/ibfaq.htm#embedded
Спасибо, а там нет почему нельзя вызвать процедуру из другой без execute procedure procA, а просто ProcA? Или можно?
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586756
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samotek> Или можно?

Нельзя. Потому что есть такие понятия, как SQL и стандарт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586775
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samotekа там нет почему нельзя вызвать процедуру из другой без execute procedure procA, а просто ProcA?
"там" много чего есть
http://www.ibase.ru/devinfo/sp_call.htm
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586809
Samotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамSamotek> Или можно?

Нельзя. Потому что есть такие понятия, как SQL и стандарт.

Так я же про процедурный sql. Ну нельзя, так нельзя!
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586868
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SamotekТак я же про процедурный sql.
не, ну есть SQL. В нем execute procedure <procname>. Почему в PSQL процедура должна вызываться по другому? Этак можно дойти, что и select в PSQL можно иначе поименовать.
FB вообще старается весьма плотно следовать стандарту.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586869
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvПочему в PSQL процедура должна вызываться по другому?
Патамушта так делает великий и ужасный оракул.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586935
Samotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvSamotekТак я же про процедурный sql.
не, ну есть SQL. В нем execute procedure <procname>. Почему в PSQL процедура должна вызываться по другому?
FB вообще старается весьма плотно следовать стандарту.
Ну процедурный не есть язык запросов. В конце концов это язык программирования. Вряд ли есть стандарт на язык программирования. Впрочем это уже другая тема, религиозная. Если так, то так. Спасибо, рассказавшим.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586969
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samotek> Ну процедурный не есть язык запросов

Формально - да, PSQL. Но, фактически, SQL-операторы
(в т.ч. вызов процедур) осуществляются согласно DSQL.
А во-вторых, процедурный язык тоже стандартизирован,
хотя не помню, требуется ли там Execute указывать явно.

> Вряд ли есть стандарт на язык программирования.

Это 5+!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38586979
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SamotekНу процедурный не есть язык запросов. В конце концов это язык программирования. Вряд ли есть стандарт на язык программирования. Впрочем это уже другая тема, религиозная.
Религиозного тут ничего нет, есть просто историческое. До SQL процедурные языки в СУБД были действительно совершенно разными, и непохожими один на другой. С появлением стандарта SQL все это стало стандартизироваться, но остались и "старые привычки". Именно поэтому совпадение по PSQL в разных СУБД меньше, чем совпадение по SQL.
И, в некоторых СУБД языком PSQL может быть, например, Java.
В Firebird PSQL использует конструкции SQL. Поэтому, было бы странным, просто вызывать процедуру одним способом, а вызывать процедуру в "psq", т.е. в другой процедуре или триггере - другим способом. Как минимум это было бы похоже на шизофрению.

Тем не менее, стандарт PSQL есть, это SQL/PSM. Википедия сообщает, что
In practice MySQL's procedural language and IBM's SQL PL (used in DB2) are closest to the SQL/PSM standard.
У Оракла свой "стандарт" на PL/SQL, разумеется.

p.s. к Оракловому PL/SQL, и вообще, считается ближе именно PSQL Firebird. Тоже есть определенная историческая (RDB) зависимость.
Ну и, наконец, был такой проект Fyracle, который на Firebird имитировал Oracle.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587054
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvSamotekТак я же про процедурный sql.
не, ну есть SQL. В нем execute procedure <procname>. Почему в PSQL процедура должна вызываться по другому?
Как классно что в Delphi не нужно для вызова функции (или процедуры с out-параметрами) писать "EXECUTE PROCEDURE бла бла RETURNING_VALUES бла бла" :)
И "DECLARE VARIABLE" на каждую из N переменных не нужно, достаточно одного "var" :)

Я натурально когда смотрю на тескт sql-процедуры, где 20-30 раз написано "DECLARE VARIABLE", осознаю некоторое излишество :)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587061
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Как классно что в Delphi

Скажи это сишникам, которые вынуждены писать
пустые скобки даже для функций без параметров.

> Я натурально когда смотрю на тескт sql-процедуры

Дык смотреть учиться надобно. Я вот не смотрю
на параметры, а только на текст, ибо у меня почти
всегда lazy-режим в ИБЕ включён чи как его там.
А вот в тех редких случаях, когда нужно всё-таки
посмотреть/скопировать текст процедуры/триггера -
вот тогда вижу всё, и это правильно.

P.S. Для EB подобной лени, правда, нет. :(

P.P.S. И ещё в SQL-эдиторе объекты на новую строку
не дропаются (нужно сначала перевод строки делать).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587074
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА во-вторых, процедурный язык тоже стандартизирован,
хотя не помню, требуется ли там Execute указывать явно.
там CALL вместо EXECUTE PROCEDURE, насколько я помню
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587077
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> там CALL вместо EXECUTE PROCEDURE, насколько я помню

Что-то я не заметил подобного - в какой версии и в
каком именно разделе ты смотришь (CLI не в счёт)?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587081
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

16.1 <call statement> (в 7IWD2-02-Foundation). Раньше это вроде в PSM было, сейчас оттуда просто ссылка ведет на Foundation.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587214
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вижу, спасибо. В 99 этого уже не было в PSM.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587229
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамСкажи это сишникам, которые вынуждены писать
пустые скобки даже для функций без параметров.
Ну хоть execute procedure и declare variable не пишут, уже жить можно :) Составитель языка тут позаботился о пользователях :)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587365
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeКак классно что в Delphi не нужно для вызова функции (или процедуры с out-параметрами) писать
иди-ка ты, товарищ... Причем, показательно, в какой момент ты этот коммент написал.

NickDeeНу хоть execute procedure и declare variable не пишут, уже жить можно
тебя писать эти конструкции сильно напрягает? declare variable, кстати, вполне по стандарту. Я понимаю, ты бы восстал против стандарта, ну так обращайся в комитет SQL, а не сюда.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587371
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да дело даже не в стандарте и не в комитете SQL.
Дело в том, что некоторые не просто преувеличивают
проблему, а высасывают её из пальца - в процедурах и
триггерах эти declare variable мало кто пишет ручками,
ибо усть IBE, а в случае EB или староверы, желающие
писать всё непременно ручками, - и те пишут только
первый раз, а дальше копипастят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587376
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам и те пишут только первый раз, а дальше копипастят.
натюрлих.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587395
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамэти declare variable мало кто пишет ручками,
ибо усть IBE, а в случае EB или староверы, желающие
писать всё непременно ручками, - и те пишут только
первый раз, а дальше копипастят
причем пишут только declare, ибо variable необязателен
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587649
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> причем пишут только declare, ибо variable необязателен

Серьёзно что ли?! Ни в Langref-e, ни в DataDef-e этого нет,
там синтаксис указывает, что обязателен. Ё-моё, вот так вот
юзаешь больше десятка лет, думаешь, что хоть азы знаешь -
и на тебе, по азам. О сколько нам открытий чудных... (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587651
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

те кто привык работать в IBE не замечают этого, потому как он сам при наборе declare дописывает слово variable
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587655
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисГаджимурадов Рустам,

те кто привык работать в IBE не замечают этого, потому как он сам при наборе declare дописывает слово variable
Те кто работает в IBE пишут только "dcl" остальное он сам :)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587674
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, беру свои слова назад. Не знаю почему,
а в процедурах у меня есть variable, а вот в EB - нету.

Странно, ибо я вроде как не знал про необязательность.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587675
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щас глянул в RN - в 2.1 примеры без variable.
Наверное, с тех пор и повелось, что не пишу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587679
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сложившемся диалекте процедурного языка ФБ присутствует "синтаксический шум", причём его - много.
Код: plaintext
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.
set term ^;
create or alter procedure sp(a_id int) returns(name varchar(80), code varchar(20) ) as
  declare [variable] i int;
  declare [variable] s varchar(80);
begin
  i=0;
  for select fio from employee into name
  do begin
     if ( i=0 ) then
     begin
         ... ... ...
     else begin
         ... ... ...
     end
     suspend;
     i = i + 1;
  end
end^

create or alter function fn(a_id int) returns varchar(80) as
  declare [variable] dts timestamp;
begin
   ... ... ...
   return ... ;
end
set term ;^

- легко могло бы читаться и так:

Код: plaintext
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.
sp( a_id int ) ( name varchar(80), code varchar(20) ) {
  // Селективная процедура: в первой паре скобок - входные параметры, во второй - поля возвращаемого кортежа
  // Комментарии, кстати, тоже можно ввести как везде: две косые палки! 
  // Потому что это не SQL, а его ПРОЦЕДУРНОЕ расширение.
  i int; // никакого declare, и так понятно, что тут объявляется переменная
  s varchar(80);
  i=0;
  // Не надо никакого 'as begin' после раздела объявления переменных! 
  // Да, хорошим стилем считается объявлять всё вверху, но я в упор не понимаю, почему переменную,
  // которая нужна только внутри блока ("{ }"), надо тоже тащить наверх. 
  // Все объявленные переменные всё равно уничтожаются на выходе.
  for select fio from employee into name {
     if i=0 { // не надо скобок вокруг bool-условия: слева от него "if", справа - "{", ну так что тут нельзя понять ?!
         ... ... ...
     } else {
         ... ... ...
     }
     suspend; // оставить! suspend отражает не только передачу клиенту, но и ожидание запроса от него след. кортежа.
     i++; // почему нельзя инкремент сделать как уже 40 лет в Си и 20 в java ?
  }
}

varchar(80) fn(a_id int) { // выходной параметр (единственный) указан слева от имени модуля ==> это - функция
  dts timestamp;
  ... ... ...
  return ... ; // раз функция, значит обязана что-то возвращать. Вот и возвращаем.
}

С языком по-настоящему приятно работать, когда всё можно делать даже не в текстовом редакторе типа notepad, а вообще в подсказке штатной консольной утилиты (isql в случае ФБ).
Но это делается уже без всяких подсказчиков типа IBE, так что тут непременно будут опечатки. А минимизировать их можно только при сокращении необходимости долбёжки пустопорожних слов типа "create or alter" (на котором IBE постоянно норовит затолкать "alter" внутрь скобок :)), declare, begin-end'ов и прочего словесного хлама. Про set term я вообще не говорю.
Синтаксис в стиле c/java вообще можно считать идеальным - он и краток и выразителен.
Но у нас такого никогда не будет, КМК.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587681
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

бобер, выдыхай (с)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587682
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уууууу, понесло Остапа, понесло...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587684
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> бобер, выдыхай (с)

ага, +1

Мало того, что на стандарты и логику покласть, так
ещё и внутри одного сообщения противоречия есть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587685
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrбобер, выдыхай (с)дык только что и выдохнул :-)
сижу вот, жду теперь, когда мутузить начнёте...
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587686
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамМало того, что на стандарты и логику покласть, так
ещё и внутри одного сообщения противоречия есть.Про какие стандарты в процедурных расширениях sql можно говорить, когда де-факто все давно "на своём" говорят ?
И что за противоречия ты на шёл, ткни, плз.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587693
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Про какие стандарты в процедурных расширениях sql можно
Таблоид> говорить, когда де-факто все давно "на своём" говорят ?

Де-факто, стандарт есть, и де-факто, говорят не все на своём,
и свой не у всех и не во всём отличается от стандарта. И уж
совсем точно глупо менять что-то ради чьих-бы то ни было
вкусовых предпочтений.

> И что за противоречия ты на шёл, ткни, плз.

Ну, те же "идеальный синтаксис c/java" (громкий хохот в зале)
и необязательные скобки в if-e, function и пр. Я уж не говорю
про всякие мелочи типа отличающиеся между собой и от
c/java объявления параметров/переменных и т.д.

А скобки вместо begin-end - это да, это святое, без этого никуда.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587703
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамДе-факто, стандарт есть, и де-факто, говорят не все на своём,
и свой не у всех и не во всём отличается от стандарта.Посмотри аттаченный скрин с текста SQL-2006: насколько близко к нему стоит ФБ и, например, M$ ? (орацле, кажись, и то ближе... странно даже! :)).

Гаджимурадов РустамНу, те же "идеальный синтаксис c/java" (громкий хохот в зале)А что смешного тут ? Эти два языка позволяют писать КРАТКО, но в то же время не до параноидального уровня, как в Cache', когда хрен разберёшь, чего сам же наваял, если не сидишь в нём постоянно.

Гаджимурадов Рустами необязательные скобки в if-e, functionВ if'e скобки вокруг boolean-условия действительно НЕ обязательны. Я не понимаю, почему парсер не в состоянии определить, где начало этого условия (т.е. сам "if") и где оно заканчивается ("begin" или "{"). И не случайно во многих IDE когда пишешь этот самый if, среда сразу же выставляет пару "(" ... ")".

Гаджимурадов РустамА скобки вместо begin-end - это да, это святое, без этого никуда.Это проклятый пережиток царизма паскаля. С ним надо бороться до победы! :-)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587713
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

не знаю, почему, но на твой текст мне вспомнился язык MUMPS/ДИАМС (свят-свят)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587720
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvне знаю, почему, но на твой текст мне вспомнился язык MUMPS/ДИАМС (свят-свят)К излишней краткости (в COS почти все команды сокращены до 1-2 символов, вроде) привыкаешь быстро. А вот к необходимости всё время выправлять очепятки при наборе текста привыкнуть нельзя. Для тех, кто на каждый чих запускает IBE, это не актуально, разумеется. Но таки есть еще странные персонажи (типа мну), кто запускает IBE только когда долбать надо действительно много и долго.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587724
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидК излишней краткости (в COS почти все команды сокращены до 1-2 символов,
вроде) привыкаешь быстро.
А сколько адреналина-то когда вместо какого-нибудь "df" на автомате набираешь "rf"... И
столько радости, что не "rm"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587728
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА сколько адреналина-то когда вместо какого-нибудь "df" на автомате набираешь "rf"... И столько радости, что не "rm"...Это ты про команды операционки говоришь. Не будем отвлекаться от основной темы топега - выразительности и краткости процедурного диалекта ФБ...
PS. Кстати, я месяца два взад набрал rm -f, думая, что сижу в папке с ненужными логами. А оказалось, что сидел в каталоге со своими драгоценными скриптами. В итоге, "откатился" взад примерно на 2-3 недели, когда бекап их делал. "Сам себе дурак" - сказал я, и стал делать бекапы раз в 3-4 дня. Так что это быстро лечится, достаточно одной "процедуры"
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587736
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

А я думал, что основная тема топика - ембеддед тройки


Ну я, конечно, знал, что линуксоид ты не так чтобы очень, но чтобы бекапами не обезопаситься...

Поставь себе какой-нибудь git или svn и потрать час на первоначальную настройку. Да даже день - все равно сторицей окупится. Даже без навороченных хуков и прочего - тупо git commit/svn commit в крон ещечасно - и потом хоть об-«rm -rf»-ся
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587763
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид

Код: plaintext
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.
set term ^;
create or alter procedure sp(a_id int) returns(name varchar(80), code varchar(20) ) as
  declare [variable] i int;
  declare [variable] s varchar(80);
begin
  i=0;
  for select fio from employee into name
  do begin
     if ( i=0 ) then
     begin
         ... ... ...
     else begin
         ... ... ...
     end
     suspend;
     i = i + 1;
  end
end^

create or alter function fn(a_id int) returns varchar(80) as
  declare [variable] dts timestamp;
begin
   ... ... ...
   return ... ;
end
set term ;^
- легко могло бы читаться и так:

Код: plaintext
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.
sp( a_id int ) ( name varchar(80), code varchar(20) ) {
  // Селективная процедура: в первой паре скобок - входные параметры, во второй - поля возвращаемого кортежа
  // Комментарии, кстати, тоже можно ввести как везде: две косые палки! 
  // Потому что это не SQL, а его ПРОЦЕДУРНОЕ расширение.
  i int; // никакого declare, и так понятно, что тут объявляется переменная
  s varchar(80);
  i=0;
  // Не надо никакого 'as begin' после раздела объявления переменных! 
  // Да, хорошим стилем считается объявлять всё вверху, но я в упор не понимаю, почему переменную,
  // которая нужна только внутри блока ("{ }"), надо тоже тащить наверх. 
  // Все объявленные переменные всё равно уничтожаются на выходе.
  for select fio from employee into name {
     if i=0 { // не надо скобок вокруг bool-условия: слева от него "if", справа - "{", ну так что тут нельзя понять ?!
         ... ... ...
     } else {
         ... ... ...
     }
     suspend; // оставить! suspend отражает не только передачу клиенту, но и ожидание запроса от него след. кортежа.
     i++; // почему нельзя инкремент сделать как уже 40 лет в Си и 20 в java ?
  }
}

varchar(80) fn(a_id int) { // выходной параметр (единственный) указан слева от имени модуля ==> это - функция
  dts timestamp;
  ... ... ...
  return ... ; // раз функция, значит обязана что-то возвращать. Вот и возвращаем.
}

или так :)
Код: pascal
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.
// set term ^; - не нужен
function sp(a_id: int): dataset(name: varchar(80); code: varchar(20));
var
  i: int;
  s: varchar(80);
begin
  i := 0;
  for 
    select fio from employee into name 
  do 
  begin
    if i = 0 then
    begin
         ... ... ...
    end
    else 
    begin
         ... ... ...
    end;
    suspend;
    i := i + 1;
  end;
end;

function fn(a_id: int): varchar(80);
var
  dts: timestamp;
begin
   ... ... ...
   return ... ; // or Result := ... - without exit
end;
// set term ;^ - не нужен


причем ещё было бы неплохо написать что-нибудь типа:
Код: pascal
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.
type
  TNameCodeDataSet = dataset(name: varchar(80); code: varchar(20)); 

function sp1(id: int): TNameCodeDataSet;
begin
  for 
    select fio, code from employee 
    where id > :id
    into result.name, result.code 
  do 
    suspend;
end;

function sp2(id1, id2: int): TNameCodeDataSet;
begin
  for 
    select fio, code from employee 
    where id between :id1 and :id2
    into result.name, result.code 
  do 
    suspend;
end;

function ProcessIt(Ds: TNameCodeDataset): int;
begin
  Result := 0;

  for select * from Ds do
  begin
    if Ds.Name contains '.' then
    begin
      insert into processed (code, name) values (Ds.Code, Ds.Name); 
      Result := Result + 1;
    end;
  end;
end;

execute block(A, B: int): int;
begin
  if A > B then
    Result := ProcessIt(sp1(A))
  else
    Result := ProcessIt(sp2(A, B));
end;



Эхх... :)
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587808
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо фигнёй маятся.
Я понимаю если бы вы придумывали расширения PSQL, но переделывать синтаксис смысла нет. Из расширений я подумывал над такими

Код: sql
1.
select * from some_procedure (param1 := :param_value1, param3 := :param_value2) 

CORE-4152

объектные типы, ROWTYPE и коллекции, а также чтобы можно было писать

Код: plsql
1.
2.
3.
4.
5.
6.
FOR(C IN (SELECT A, B FROM T)) DO
BEGIN
  UPDATE T2
  SET T2.A = C.A
  WHERE T2.B = C.B;
END



ещё раз повторю хотеть есть смысл расширений синтаксиса, а не полную его переделку
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587829
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса также чтобы можно было писать

Код: plsql
1.
2.
3.
4.
5.
6.
FOR(C IN (SELECT A, B FROM T)) DO
BEGIN
  UPDATE T2
  SET T2.A = C.A
  WHERE T2.B = C.B;
END



к слову, вот это у меня лежит сделанным, только в более "нашем" синтаксисе:

Код: plsql
1.
2.
3.
4.
for select A, B from T as cursor C -- нет INTO-кляузы
do begin
  update T2 set A = C.A where B = C.B;
end



есть какие-либо конструктивные возражения на этот счет?

вот только я пока не вижу, как это изящно прикрутить к PSQL-курсорам. Смущает глобальность имени курсора, т.е. ссылки на него, во-первых, будут гадить в пространство имен в пределах всей процедуры (случайно написал запрос с алиасом таблицы C, а тебе вернулись данные курсора C - сюрприз! или напрочь запрещать использовать C как имя или алиас таблицы в процедуре?), а во-вторых, придется на каждую ссылку проверять состояние курсора (чтобы ему ненароком CLOSE не успели сделать между FETCH и обращением к полям C).
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38587849
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrесть какие-либо конструктивные возражения на этот счет?
так тоже пойдёт

dimitrво-первых, будут гадить в пространство имен в пределах всей процедуры (случайно написал запрос с алиасом таблицы C, а тебе вернулись данные курсора C - сюрприз! или напрочь запрещать использовать C как имя или алиас таблицы в процедуре?)
можно разыменовывать курсор как это сделано для переменных

Код: plsql
1.
2.
3.
....
  update T2 set A = :C.A where B = :C.B;
....



dimitrа во-вторых, придется на каждую ссылку проверять состояние курсора (чтобы ему ненароком CLOSE не успели сделать между FETCH и обращением к полям C).

ну тут ничего не поделаешь, единственное что его можно проверять на каждый оператор где используется хоть одна ссылка на курсор, т.е. в приведённом выше примере для UPDATE достаточно проверить 1 раз для каждый итерации, а не по количеству этих ссылок внутри UPDATE
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38588439
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНе будем отвлекаться от основной темы топега - выразительности и краткости процедурного диалекта ФБ...
Никто не мешает писать прямо на BLR.
Никакого синтаксического сахара, всё кратко, чёткая структура.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38588452
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

нет уж, боже упаси. Хотя Таблоид может
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38588476
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидВ сложившемся диалекте процедурного языка ФБ присутствует "синтаксический шум", причём его - много.
Возможно "проблему" смягчит подключение внешних языков в новой версии?
Хочется чистоты и лаконичности - Python именно такой.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38588646
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgmТаблоидВ сложившемся диалекте процедурного языка ФБ присутствует "синтаксический шум", причём его - много.
Возможно "проблему" смягчит подключение внешних языков в новой версии?
Типа делаем что-то типа isc_dsql_execute2 (с указанием диалекта N), и серверный плагин для этого языка парсит это (+переводит в BLR), и отдаёт на выполнение ядру? :)
Такое уже можно в тройке?

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

так в RN перечислены все типы плагинов и что какой из них может
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38588865
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

BLR тут не причём. Это UDR. Как вариант языка отличного от C++ - Java, которую мне так и не удалось заставить работать на специальной сборке. Я так понимаю реализация этих механизмов ещё не финал. Вопрос к отцам, но помнится от себя обещали лишь UDR (C++) и возможно Java. Delphi и прочие шалости - сторонние разработчики. С точки зрения сервера программа на внешнем языке выглядит как UDR dll. По сути обёртка. Могу быть неправ.
...
Рейтинг: 0 / 0
Стандарты SQL и Файрберд
    #38592534
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассуждения про эксперт выкусил в отдельный топик
Шаблоны в IBExpert
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Стандарты SQL и Файрберд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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