powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Выполнение запросов
3 сообщений из 3, страница 1 из 1
Выполнение запросов
    #39981743
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если через F12 попытаться выполнить запрос, который возвращает ошибку (например, заданы недопустимые параметры), то он вернёт пустую таблицу. Если попытаться не завершая транзкацию выполнить его ещё раз, то получим исключение:
Error MessageThe cursor identified in a FETCH or CLOSE statement is not open.
Attempt to reclose a closed cursor.


[00546A0F] FIB.IBError (Line 556, "FIB.pas" + 55) + $2
[0053C683] FIBQuery.TFIBQuery.FreeHandle (Line 3639, "FIBQuery.pas" + 8) + $E
[0053E89D] FIBQuery.TFIBQuery.SQLChanging (Line 4426, "FIBQuery.pas" + 4) + $8
[01034EC8] DataFm.TDataFrame.SetSQL (Line 2630, "Frames\DataFm.pas" + 3) + $10
[00DDC296] SQLscrF.TSQLScriptForm.ExecuteIBQuery (Line 3629, "SQLscrF.pas" + 76) + $17
[00DD695D] SQLscrF.TSQLScriptForm.aRunQueryExecute (Line 1989, "SQLscrF.pas" + 22) + $6
...
Рейтинг: 0 / 0
Выполнение запросов
    #39982086
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пример запроса на системных таблицах?
...
Рейтинг: 0 / 0
Выполнение запросов
    #39982130
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
/******************************************************************************/
/***                               Procedures                               ***/
/******************************************************************************/

SET TERM ^ ;

CREATE PROCEDURE DATE_GEN(
    DFROM DATE NOT NULL,
    DTO DATE NOT NULL)
RETURNS (
    CDATE DATE)
AS
BEGIN
  SUSPEND;
END^


SET TERM ; ^



/******************************************************************************/
/***                            Tables and Views                            ***/
/******************************************************************************/

CREATE TABLE ALFA (
    ID INTEGER GENERATED BY DEFAULT AS IDENTITY,
    ID_NEW_NAME INTEGER NOT NULL,
    DAT DATE NOT NULL,
    POSIT INTEGER NOT NULL,
    SUMMA INTEGER NOT NULL);


CREATE TABLE ROKEROVKA (
    ID INTEGER GENERATED BY DEFAULT AS IDENTITY,
    OLD_VAL VARCHAR(20) CHARACTER SET WIN1251 NOT NULL,
    NEW_VAL VARCHAR(20) CHARACTER SET WIN1251 NOT NULL,
    VID VARCHAR(20) CHARACTER SET WIN1251 NOT NULL,
    CATEGORY VARCHAR(20) CHARACTER SET WIN1251 NOT NULL);




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


ALTER TABLE ALFA ADD CONSTRAINT PK_ALFA PRIMARY KEY (ID);
ALTER TABLE ROKEROVKA ADD CONSTRAINT PK_ROKEROVKA PRIMARY KEY (ID);

/******************************************************************************/
/***                           Unique constraints                           ***/
/******************************************************************************/



CREATE INDEX A_IDX1 ON ALFA (DAT);

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

SET TERM ^ ;

SET TERM ; ^

/******************************************************************************/
/***                               Procedures                               ***/
/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE DATE_GEN(
    DFROM DATE NOT NULL,
    DTO DATE NOT NULL)
RETURNS (
    CDATE DATE)
AS
begin
  cdate = dfrom;
  while (cdate <= dto) do
  begin
    suspend;
    cdate = cdate + 1;
  end
end^


SET TERM ; ^

execute ibeblock
as
begin
  for i = 1 to 100 do
  begin
    v_OLD_VAL = ibec_RandomString(7, 10, 65, 90);
    v_NEW_VAL = ibec_RandomString(7, 10, 65, 90);
    v_VID = ibec_RandomString(4, 8, 65, 90);
    v_CATEGORY = ibec_RandomString(10, 20, 97, 122);

    INSERT INTO ROKEROVKA (OLD_VAL, NEW_VAL, VID, CATEGORY) VALUES (:v_OLD_VAL, :v_NEW_VAL, :v_VID, :v_CATEGORY);

    if (ibec_Mod(i, 1000) = 0) then
      Commit;
  end;
  Commit;

  lst_ID_NEW_NAME = null;
  iIndex = 0;
  for select ID
      from ROKEROVKA
      into :vValue
  do
  begin
    lst_ID_NEW_NAME[iIndex] = :vValue;
    iIndex = iIndex + 1;
    if (iIndex >= 100) then
      Break;
  end;

  for i = 1 to 100 do
  begin
    iIndex = ibec_Random2(0, ibec_High(lst_ID_NEW_NAME));
    v_ID_NEW_NAME = lst_ID_NEW_NAME[iIndex];
    v_DAT = ibec_Random2(43983, 44033);
    v_POSIT = ibec_Random2(1, 15);
    v_SUMMA = ibec_Random2(400, 8600);

    INSERT INTO ALFA (ID_NEW_NAME, DAT, POSIT, SUMMA) VALUES (:v_ID_NEW_NAME, :v_DAT, :v_POSIT, :v_SUMMA);

    if (ibec_Mod(i, 1000) = 0) then
      Commit;
  end;
  Commit;

end


Пример запроса:
Код: sql
1.
2.
3.
4.
5.
select g.cdate, r.category, r.vid, sum( a.posit ) sum_posit, sum( a.summa ) sum_summa
  from rokerovka r right join date_gen(:d1, :d2) g on true
  left join alfa a on a.id_new_name = r.id and a.dat = g.cdate
  group by g.cdate, r.category, r.vid
  order by g.cdate


Если при первом запуске оставить один параметр NULL, то он выдаст ошибку и откроет "пустую" таблицу. Если не завершать транзакцию, а нажать F9 (опцилонально: ввести правильные параметры) и выполнить ещё раз, то он выдаст исключение.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Выполнение запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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