Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];

Вниз

Ошибка insert select   Найти похожие ветки 

 
ShuraGrp   (2002-07-25 12:56) [0]

Уважаемые Мастера! Помогите разобрать. Есть ХР, в которой собственно и есть insert select. Почему ошибка не пойму.
Как видно из текстов ошибок ругается на дату.
Ошибки получены в дебагере EMS QuickDesk. Сама процедура из D6 не ругается, но возвращает Null.
Если убрать из select условие по дата, то все работает.
Может кто подскажет. Буду очень признателен.

CREATE PROCEDURE MAKEDEBET (
DOC_DATE DATE,
SCL INTEGER,
PROD INTEGER)
RETURNS (
SUMDEBET NUMERIC (15, 2))
AS
declare variable u integer;
declare variable us varchar(30);
declare variable d varchar(30);

begin
u = gen_id(GEN_ENTTMP, 1);

insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col)
select :u, e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= :DOC_DATE;

incompatible column/host variable data type.
Dynamic SQL error.
SQL error code = -303.
Conversion error from string ""2002-07-22"".

Пробовал так:
begin
d = :DOC_DATE;
us = gen_id(GEN_ENTTMP, 1);

insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col)
select cast(:us as integer), e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= cast(:d as date);

An error was found in application program input parameters for the sql statment.
Dynamic SQL error.
SQL error code = -804.
Data type unknown.


 
Alexandr   (2002-07-25 13:07) [1]

это глюк дебаггера.

Ведь дебаггера нету.
А то, что есть это эмуляция со своими ограничениями и ошибками.


 
ShuraGrp   (2002-07-25 13:56) [2]

Ну допустим глюк. Но Null то почему, данные то есть в таблице.


 
Alexandr   (2002-07-25 14:06) [3]

ты бы хоть текст процедуры полностью привел...
а то ведь даже не видно чего там в SUMDEBET попасть должно...


 
ShuraGrp   (2002-07-25 14:33) [4]

CREATE PROCEDURE MAKEDEBET (
DOC_DATE DATE,
SCL INTEGER,
PROD INTEGER,
COL NUMERIC (15, 5),
NL_ID INTEGER,
DL_ID INTEGER,
DOC_ID INTEGER,
R INTEGER)
RETURNS (
SUMDEBET NUMERIC (15, 2))
AS
declare variable i integer;
declare variable u integer;
declare variable us varchar(30);
declare variable d varchar(30);
declare variable Prod_id integer;
declare variable Ent_id integer;
declare variable Prod_Cena NUMERIC(15, 2);
declare variable b CHAR(1);
declare variable Ent_Col NUMERIC(15, 5);
declare variable Ent_Col_Sum NUMERIC(15, 5);
declare variable Curr_Col NUMERIC(15, 5);

begin
/*Dat = cast(Dat as Date);*/

/*


 
ShuraGrp   (2002-07-25 14:34) [5]

Извиняюсь кодировка подвела, но помоему текст прозрачен


 
Desdechado   (2002-07-25 18:22) [6]

1. ругается не на дату, а на несовместимость типов данных.
2. я бы сделал так
for select prod_id, ent_id, prod_cena, ent_col
from entries
where ent1_id = 0 and scl_id = :Scl and prod_id = :Prod and doc_date <= :DOC_DATE
into :prd, :ent, :cena, :col
do
insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col) values (:u, :prd, :ent, :cena, :col );


 
ShuraGrp   (2002-07-26 10:08) [7]

2Desdechado © (25.07.02 18:22)
А на сколько эта конструкция будет работать медленнее на больших объемах


 
Desdechado   (2002-07-26 10:26) [8]

тестов не проводил, но рассуждая логически - одинаково. и там, и там строится курсор, содержимое которого запихиваются в таблицу. в твоем варианте в курсор попадает еще постоянное поле из параметра - это дополнительная нагрузка на сервер. в моем варианте идет запись в переменные - тоже нагрузка.

при желании всегда можно проверить :)


 
ShuraGrp   (2002-07-26 10:41) [9]

Кажется я нашел косяк, но все равно не пойму почему:
Такая конструкция возвращает нормальные значения
select e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= :DOC_DATE
into :prod_id, :ent_id, :prod_cena, :ent_col

а такая все Null
for select e.prod_id, e.ent_id, e.prod_cena, e.ent_col
from entries e
where e.ent1_id = 0
and e.scl_id = :Scl
and e.prod_id = :Prod
and e.doc_date <= :DOC_DATE
into :prod_id, :ent_id, :prod_cena, :ent_col
do insert into EntTemp (User_id, prod_id, ent_id, prod_cena, ent_col)
values (:u, :prod_id, :ent_id, :prod_cena, :ent_col);
И вполне естественно ругань на Null, тк поля not Null


 
Desdechado   (2002-07-26 11:13) [10]

гы! так ты хочешь все-в-одном :)
ты либо делай выборку с возвращением данных (1), либо заполнение таблицы из другой выборки, которая не возвращается (2). это ж совершенно разные вещи!


 
ShuraGrp   (2002-07-26 12:59) [11]

Я сделал как посоветовали Desdechado © (25.07.02 18:22)
А в чем разные? И все-таки хотелось бы понять с конструкцией insert select?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
4-48355
Alexej
2002-05-12 08:10
2002.08.15
Запуск приложения без формы


7-48346
Sergi
2002-05-27 17:01
2002.08.15
Динамическое создание ADO компонентов при запуске сервиса


1-48141
BAY
2002-08-01 13:46
2002.08.15
блокировка events


1-48019
Alex
2002-08-02 22:48
2002.08.15
Шутка юмора


6-48225
Adventure
2002-05-31 13:40
2002.08.15
***** Нужна идея ***** (Посещение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский