Форум: "Базы";
Текущий архив: 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