powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sql state s0002 table not found
11 сообщений из 11, страница 1 из 1
sql state s0002 table not found
    #38928194
Kortic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Кто знаком с этой проблемы, подскажите как с ней разобраться.
PB 6.5
SQL Anywhere 11
создаю DataWindow на основе процедуры хранимой в БД и пишет ошибку

SQLSTATE = s0002
Table '#t_all_timelines from' not found.

Хотя в PHP эта процедурка работает исправно. Пробовал исполнять ее в самой СУБД тоже все работает отлично, а PB выдает эту ошибку.

Если это поможет частичный код самой процедурки

//------
select id into #t_needed_works from "DBA"."works"
WHERE
spec_id = s_id and stat_id = ls_stat;
select * into #t_all_timelines from "DBA"."work_hist"
WHERE
work_id in ( select id from #t_needed_works );
//------
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38929006
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А таблица где создается? При создании DataWindow на основе хранимой процедуры PB вызывает ее с "фиктивными" параметрами, для того чтобы определить формат ResultSet'а. Поэтому, либо формируем все руками, либо предусматриваем такой вызов внутри процедуры создаем временную табличку, когда ей приходят такие параметры.
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38929138
Kortic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Локшин Марк,

Прямо в запросе создается временная таблица, текстом ниже. Сама Процедурка хорошо работает в уже боевой базе данных, с PHP ее изменять крайне не желательно, может с помощью Blob как то получить резулт сет, а потом его раздербанить? Я правда не знаю как это сделать.
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38929516
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задайте ResultSet вручную, в чем проблема?
Но код в процедуре мягко говоря не идеальный.
Марк правильно советует, лучше написать в процедуре так
Код: sql
1.
2.
3.
4.
create table  #t_all_timelines (.....
insert into  #t_all_timelines
select .... from  "DBA"."work_hist"
WHERE ....


Это безусловно более стабильный вариант. И не ленитесь - пропишите поля, а то при добавлении чего-то в work_hist можно получить неприятный результат.
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38930743
Kortic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001,

Пробую так сделать, но теперь выдает ошибку таблица #t_all_timelines already exist, в общем вот код процедуры, помогите разобраться, люди добрые))


Код: plsql
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.
ALTER PROCEDURE "DBA"."get_spec_employment"
 ( in s_id int, in ls_stat int, in ls_from datetime, in ls_to datetime, in ord int )
BEGIN
/********RECEIVE***********/
//s_id - specialist id (from dba.specialists)
//ls_stat - status of work (from dba.work_stats)
//ls_from - period from 
//ls_to - period to
/**************************/
//IF ls_stat = 1 or ls_stat = 3 THEN////FOR OPENED 1 AND POSTOPENED 2 AND CLOSED 3!!!!
create table #t_all_timelines
        (id integer, work_id integer, comments text, from_dt timestamp, to_dt timestamp, amount money);
    
IF ls_stat = 1 THEN
    select id into #t_needed_works from "DBA"."works" 
    WHERE
        spec_id = s_id and stat_id = ls_stat;
    select 
        id, work_id, comments, from_dt, to_dt 
    into #t_all_timelines from "DBA"."work_hist" 
    WHERE
        work_id in ( select id from #t_needed_works );
    
ELSEIF ls_stat = 2 THEN

    select id into #t_needed_works from "DBA"."works" 
    WHERE
        stat_id = ls_stat;
    select 
        id, work_id, comments, from_dt, to_dt 
    into #t_all_timelines from "DBA"."work_hist" 
    WHERE
        work_id in ( select id from #t_needed_works );

ELSEIF ls_stat = 3 THEN            /// -1 for report

    SELECT 
        id, work_id, comments, from_dt, to_dt
    INTO #t_all_timelines
    FROM "dba"."work_hist"
    WHERE (
            (
                to_dt >= ls_to
                and 
                from_dt <= ls_from
            )
        or
            (
                to_dt <= ls_to
                and 
                to_dt >= ls_from
            )
        or
            (
                from_dt <= ls_to
                and 
                from_dt >= ls_from
            )
        )
        and work_id in (
                select id from "DBA"."works" 
                WHERE
                    spec_id = (IF s_id > 0 THEN s_id ELSE spec_id ENDIF)
                    and stat_id = ls_stat
            )
END IF;    
    select
        distinct(t1.work_id) as w_id, 
        (select List(STRING('[',from_dt, ',', to_dt,']'), ',' ORDER BY from_dt) from "DBA"."work_hist" t2 WHERE t2.work_id = w_id) 
            as timestamps,
        (select List(STRING('[',"comments",']'), ',' ORDER BY from_dt) from "DBA"."work_hist" t3 WHERE t3.work_id = w_id) 
            as comments,
         (select List(STRING('[',"id",']'), ',' ORDER BY from_dt) from "DBA"."work_hist" t2 WHERE t2.work_id = w_id) 
            as timestamp_ids
        into #t_needed_timelines
    from #t_all_timelines t1 ;


    //IF ls_stat = 1 or ls_stat = 2 or ls_stat = 3 THEN////FOR OPENED AND POSTOPENED AND CLOSED - ALL EVEN EMPTY!!!!
    IF ls_stat = 1 or ls_stat = 2 THEN
    insert into #t_needed_timelines (w_id, "timestamps", "comments", "timestamp_ids")
        select id, '', '', '' 
            from "DBA"."works" tt
        LEFT OUTER JOIN #t_needed_timelines t2
            ON tt.id = t2.w_id
        WHERE 
             tt.id in ( select distinct(id) from #t_needed_works )
            and
             tt.id not in ( select distinct(work_id) from #t_all_timelines ) 
    END IF;



    select 
        work_stats.value as stat_s,
        t6.comments as main_comment,
        t5.w_id as w_id, 
        t5.timestamps,
        t5.comments,
        work_stats.id as stat_int,
        t5.timestamp_ids,
        (IF t10.ticket_id is not NULL THEN 1 ELSE 0 ENDIF) as msgs
        into #all_rows
    from #t_needed_timelines t5
        LEFT OUTER JOIN "dba"."works" t6
            ON t5.w_id = t6.id
        LEFT OUTER JOIN "dba"."work_stats"
            ON work_stats.id = t6.stat_id
        LEFT OUTER JOIN "dba"."ticket_hist" t9
            ON w_id = t9.work_id
        LEFT OUTER JOIN "dba"."ticket_msg" t10
            ON t9.ticket_id = t10.ticket_id and t10.readed=0 and t10.creator_id != s_id
    ORDER BY w_id;

    select t7.*, t8.ticket_id, t9.value as place from #all_rows t7
        LEFT OUTER JOIN "dba"."ticket_hist" t8
            ON t7.w_id = t8.work_id
        LEFT OUTER JOIN "dba"."tickets" t82
            ON t8.ticket_id = t82.id
        LEFT OUTER JOIN "dba"."places_all" t9
            ON t82.place_id = t9.id 
    
group by w_id,stat_s,main_comment,timestamps,comments,stat_int,timestamp_ids,ticket_id,place,msgs
order by 
CASE WHEN ord = 1 THEN w_id ELSE '' END ASC,
CASE WHEN ord = 2 THEN w_id ELSE '' END DESC,
CASE WHEN ord = 3 THEN ticket_id ELSE '' END ASC,        
CASE WHEN ord = 4 THEN ticket_id ELSE '' END DESC;

END


...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38930985
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kortic;

Код: sql
1.
2.
3.
create table #t_all_timelines ...
.....        
select ...   into #t_all_timelines from "DBA"."work_hist"        


ничего не говорит?
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38931076
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT 
        id, work_id, comments, from_dt, to_dt
    INTO #t_all_timelines


Создаете еще одну таблицу, поэтому и ошибка
Сравните с
Код: sql
1.
2.
3.
insert into  #t_all_timelines
select .... from  "DBA"."work_hist"
WHERE ....
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38931940
Kortic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001,

Исправил как вы советовали но PB все равно выдает ту же самую ошибку ....#t_all_timelines not found... я уже вобще не пойму что не так!...
Вот такая в итоге процедрка вышла
Код: 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.
ALTER PROCEDURE "DBA"."get_spec_employment"
 ( in s_id int, in ls_stat int, in ls_from datetime, in ls_to datetime, in ord int )
BEGIN
/********RECEIVE***********/
//s_id - specialist id (from dba.specialists)
//ls_stat - status of work (from dba.work_stats)
//ls_from - period from 
//ls_to - period to
/**************************/
//IF ls_stat = 1 or ls_stat = 3 THEN////FOR OPENED 1 AND POSTOPENED 2 AND CLOSED 3!!!!
create table #t_all_timelines
        (id integer, work_id integer, comments text, from_dt timestamp, to_dt timestamp);
    
IF ls_stat = 1 THEN      
    select id into #t_needed_works from "DBA"."works" 
    WHERE
        spec_id = s_id and stat_id = ls_stat;

    insert into #t_all_timelines
    select 
        id, work_id, comments, from_dt, to_dt 
    from "DBA"."work_hist" 
    WHERE
        work_id in ( select id from #t_needed_works );
    
ELSEIF ls_stat = 2 THEN

    select id into #t_needed_works from "DBA"."works" 
    WHERE
        stat_id = ls_stat;
    insert into #t_all_timelines
    select 
        id, work_id, comments, from_dt, to_dt 
    from "DBA"."work_hist" 
    WHERE
        work_id in ( select id from #t_needed_works );

ELSEIF ls_stat = 3 THEN            /// -1 for report
    insert into #t_all_timelines
    SELECT 
        id, work_id, comments, from_dt, to_dt    
    FROM "dba"."work_hist"
    WHERE (
            (
                to_dt >= ls_to
                and 
                from_dt <= ls_from
            )
        or
            (
                to_dt <= ls_to
                and 
                to_dt >= ls_from
            )
        or
            (
                from_dt <= ls_to
                and 
                from_dt >= ls_from
            )
        )
        and work_id in (
                select id from "DBA"."works" 
                WHERE
                    spec_id = (IF s_id > 0 THEN s_id ELSE spec_id ENDIF)
                    and stat_id = ls_stat
            )
END IF;    
    select
        distinct(t1.work_id) as w_id, 
        (select List(STRING('[',from_dt, ',', to_dt,']'), ',' ORDER BY from_dt) from "DBA"."work_hist" t2 WHERE t2.work_id = w_id) 
            as timestamps,
        (select List(STRING('[',"comments",']'), ',' ORDER BY from_dt) from "DBA"."work_hist" t3 WHERE t3.work_id = w_id) 
            as comments,
         (select List(STRING('[',"id",']'), ',' ORDER BY from_dt) from "DBA"."work_hist" t2 WHERE t2.work_id = w_id) 
            as timestamp_ids
        into #t_needed_timelines
    from #t_all_timelines t1 ;


    //IF ls_stat = 1 or ls_stat = 2 or ls_stat = 3 THEN////FOR OPENED AND POSTOPENED AND CLOSED - ALL EVEN EMPTY!!!!
    IF ls_stat = 1 or ls_stat = 2 THEN
    insert into #t_needed_timelines (w_id, "timestamps", "comments", "timestamp_ids")
        select id, '', '', '' 
            from "DBA"."works" tt
        LEFT OUTER JOIN #t_needed_timelines t2
            ON tt.id = t2.w_id
        WHERE 
             tt.id in ( select distinct(id) from #t_needed_works )
            and
             tt.id not in ( select distinct(work_id) from #t_all_timelines ) 
    END IF;



    select 
        work_stats.value as stat_s,
        t6.comments as main_comment,
        t5.w_id as w_id, 
        t5.timestamps,
        t5.comments,
        work_stats.id as stat_int,
        t5.timestamp_ids,
        (IF t10.ticket_id is not NULL THEN 1 ELSE 0 ENDIF) as msgs
        into #all_rows
    from #t_needed_timelines t5
        LEFT OUTER JOIN "dba"."works" t6
            ON t5.w_id = t6.id
        LEFT OUTER JOIN "dba"."work_stats"
            ON work_stats.id = t6.stat_id
        LEFT OUTER JOIN "dba"."ticket_hist" t9
            ON w_id = t9.work_id
        LEFT OUTER JOIN "dba"."ticket_msg" t10
            ON t9.ticket_id = t10.ticket_id and t10.readed=0 and t10.creator_id != s_id
    ORDER BY w_id;

    select t7.*, t8.ticket_id, t9.value as place from #all_rows t7
        LEFT OUTER JOIN "dba"."ticket_hist" t8
            ON t7.w_id = t8.work_id
        LEFT OUTER JOIN "dba"."tickets" t82
            ON t8.ticket_id = t82.id
        LEFT OUTER JOIN "dba"."places_all" t9
            ON t82.place_id = t9.id 
    
group by w_id,stat_s,main_comment,timestamps,comments,stat_int,timestamp_ids,ticket_id,place,msgs
order by 
CASE WHEN ord = 1 THEN w_id ELSE '' END ASC,
CASE WHEN ord = 2 THEN w_id ELSE '' END DESC,
CASE WHEN ord = 3 THEN ticket_id ELSE '' END ASC,        
CASE WHEN ord = 4 THEN ticket_id ELSE '' END DESC;

END


Ради эксперимента я даже просто удалил абсолютно все из процедуры оставил только create table #t_all_timelines...
и все равно пишет ту же ошибку!!!
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38932006
Kortic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все я разобрался в чем дело было, всем большое спасибо за помощь!! Действительно надо было однозначно определить эту таблицу и поля, еще раз большое спасибо! ))
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38932229
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще и для остальных было бы нелишним сделать то же самое.
В конце процедуры их почистить (drop table...)
...
Рейтинг: 0 / 0
sql state s0002 table not found
    #38932259
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if object_id('#t_all_timelines') is null select 0 else select 1?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / sql state s0002 table not found
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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