Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
-2-
Member

Откуда:
Сообщений: 13830
DBAshnik
SY
Да суть вообще-то не в этом. Какой смысл писать EXECUTE IMMEDIATE с литералом (невaжно NULL не NULL) в качестве bind value?
а тот что этот литерал может подменятся внутри ява кода мысль не посещала? ;-)
Динамически формировать plsql из джавы, который динамически выполняет sql. Есть какие-то обоснования для извращений?
2 окт 18, 12:38    [21692483]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9113
DBAshnik
а тот что этот литерал может подменятся внутри ява кода мысль не посещала? ;-)


Ты знаешь, воображение у меня воспаленное, но чтобы настолько? Даже если в чьих-то отравленных нарзаном мозгaх и возникнет мысль лепить динамический SQL в java, то я по наивности бы ожидал:

execute immediate 'select count(*) from dual where sysdate > literal' into lCnt


Но

execute immediate 'select count(*) from dual where sysdate > :bind' into lCnt using literal


это венец творенья. Пишем косяк а затем его исправляем косяком.

SY.
2 окт 18, 14:08    [21692638]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
SY

это венец творенья. Пишем косяк а затем его исправляем косяком.

SY.


???? обоснуй
2 окт 18, 16:40    [21692967]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9113
DBAshnik
???? обоснуй


Косяк 1: Зачем в java генерирорать динамический SQL?
Косяк 2: Косяк 2 использование литeрала в качестве bind переменной.

Почему не обыкновенный:

SelectStatement = connection.prepareStatement("select count(*) from dual where sysdate > ?");
SelectStatement.setDate(1,JavaDateVariable); 


Тога и косяк 2 не потребуется.

SY.
2 окт 18, 17:29    [21693043]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9113
Кстати, есть еще и косяк 3. Если java генерит

SelectStatement = connection.prepareStatement("execute immediate 'select count(*) from dual where sysdate > :xDt  ' into lCnt using каждый-раз-новый-литерал";


то подумай над shared pool.

SY.
2 окт 18, 17:40    [21693053]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16771
SY
Зачем в java генерирорать динамический SQL?

Есть смешной вариант, когда шаблон SQL-я прилада тянет из специальной таблички-репозитория, а параметры запихивает в текст реплейсом placeholder-ов.
Вариация на тему метамоделей.
Тогда сами шаблоны пишут специально (не)обученные человеки.
И да, библиотечному кэшу в этом варианте бывает слегка дурно при высокой интенсивности запросов.
2 окт 18, 17:53    [21693072]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53869
Блог
Сообщение, конечно, не самое дружественное. С другой стороны, имея кучу реальных проблем, тратить время и силы на улучшение поведения в изначально нездоровой ситуации - глупо. Ну а наплодив такую хрень и выпустив - судя по "куче времени" - из-под контроля её управляемость, видеть причину всех несчастий в оракловой диагностике - лично я это называю "Перекладывать вину со своей головы на здоровую".
2 окт 18, 21:27    [21693367]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
SY

Почему не обыкновенный:

SelectStatement = connection.prepareStatement("select count(*) from dual where sysdate > ?");
SelectStatement.setDate(1,JavaDateVariable); 


...
SY.


потому, что это Talend! И там я такое делать не могу, к сожалению (в данном проекте, по крайней мере). А динамический SQL-там по любому нужен, по другим причинам, в которые я не хочу углубляться!

Нежелание ораклом сделать интуитивно-удобно равно и неадекватная диагностика ошибок оракл (как в этом, так и в других случаях) совершенно очевидно имеет место быть!!! В этом меня тут пока никто не переубедил! Пока вижу только попытки наехать и высокомерие.
4 окт 18, 15:25    [21695352]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
-2-
Member

Откуда:
Сообщений: 13830
DBAshnik
потому, что это Talend!
не переубедил.
DBAshnik
Нежелание ораклом сделать интуитивно-удобно
какого типа должен получиться бинд значения неизвестного типа?
4 окт 18, 15:31    [21695375]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
-2-
потому, что это Talend!
не переубедил.

большой опыт работы с _нашими_ проектами на Talend?? ;-)

DBAshnik
Нежелание ораклом сделать интуитивно-удобно
какого типа должен получиться бинд значения неизвестного типа?[/quot]
не знаю! Иначе б я в Оракл работал, наверное ;-) Интуиция подсказывает, что есть сравнивается, например, с date, то и подставляй - будь любезен - to_date() за человека автоматически, или это уже про запредельный hi-tec по твоему? ;-)
А то это пока что уровень комфорта из прошлого века ( когда ещё телепрограммы плоскогубцами переключали. ))) И ничё, выживали ж как-то! :-)))) )
4 окт 18, 16:17    [21695457]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9113
DBAshnik
потому, что это Talend!


C Talend не знаком, но если нет другого выхода кроме dynamic SQL, то почему не:

declare 
  lCnt pls_integer;
  lDt date := ...; -- тут и вставляй свой литерал
begin 
   execute immediate 'select count(*) from dual where sysdate > :xDt  ' into lCnt using lDt;
end;


SY.
4 окт 18, 16:21    [21695467]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
-2-
Member

Откуда:
Сообщений: 13830
DBAshnik
-2-
какого типа должен получиться бинд значения неизвестного типа?
не знаю! Иначе б я в Оракл работал, наверное ;-) Интуиция подсказывает, что есть сравнивается, например, с date, то и подставляй - будь любезен - to_date()
Когда напишешь свою СУБД, реализуешь интуитивное распознавание типов выражений по строке динамического sql. И про возможность указать в строке "хинты" типа to_date() не забудь, а то ведь одни и те же операции могут выполняться с разными типами.
4 окт 18, 16:56    [21695505]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9113
Будь моя воля я бы вообще запретил USING литeралы в EXECUTE IMMDEDIATE.

SY.
4 окт 18, 17:06    [21695515]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
XMLer
Member

Откуда:
Сообщений: 241
DBAshnik
Интуиция подсказывает, что есть сравнивается, например, с date, то и подставляй - будь любезен - to_date() за человека автоматически


Не дай бог! Лучше разбираться с ошибками чем со слабо прогнозируемым результатами. Как по мне так в oralce слишком много неявных преобразований типов.
4 окт 18, 17:07    [21695517]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53869
Блог
SY
Будь моя воля я бы вообще запретил USING литeралы в EXECUTE IMMDEDIATE

Так там ведь разрешены не литералы, а выражения - что хорошо и правильно, а литералы - просто частный случай выражений. Практически бессмысленный в таком контексте, конечно, но специально запрещать экзотический способ выстрелить себе в ногу... имхо, лучше бы заниматься чем-то реально полезным.
4 окт 18, 17:14    [21695522]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53869
Блог
XMLer
Не дай бог! Лучше разбираться с ошибками чем со слабо прогнозируемым результатами. Как по мне так в oralce слишком много неявных преобразований типов.

Угу. Это вечный источник радости.

К сообщению приложен файл. Размер - 1Kb
4 окт 18, 17:18    [21695529]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53869
Блог
А ещё лучше как-нибудь так:

К сообщению приложен файл. Размер - 1Kb
4 окт 18, 17:20    [21695533]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
softwarer
XMLer
Не дай бог! Лучше разбираться с ошибками чем со слабо прогнозируемым результатами. Как по мне так в oralce слишком много неявных преобразований типов.

Угу. Это вечный источник радости.


??? это где такие бажищи!?! (версия? Патчи?) 53 естественно лажа, так как тип определяет _оператор_ (в данном случае "+") а не операнд!

у меня, хоть на 11g хоть на 12с:

select 5 + '3' from dual
--
8

select 5 - '3' from dual
--
2
4 окт 18, 17:33    [21695548]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
softwarer
А ещё лучше как-нибудь так:


Вау! У меня везде только 7ки, _разумеется_!
4 окт 18, 17:35    [21695553]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16771
SY
declare 
  lCnt pls_integer;
  lDt date := ...; -- тут и вставляй свой литерал
begin 
   execute immediate 'select count(*) from dual where sysdate > :xDt  ' into lCnt using lDt;
end;


SY.

21689495
4 окт 18, 17:38    [21695558]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53869
Блог
DBAshnik
??? это где такие бажищи!?! (версия? Патчи?)

В браузере F12 нажми. Это javascript-овая консоль. В оракле есть свои замечательные моменты. Ну вот хотя бы попробуй угадать результат следующего:

create table t$1(i integer, j integer);
insert into t$1 values (1, 1);
insert into t$1 values (2, 2);
create table t$2 (i integer, j varchar2(10));
insert into t$2 values (1, '1');
insert into t$2 values (3, 'foo');
select * from t$1, t$2 where t$1.i = t$2.i and t$1.j = t$2.j;
4 окт 18, 17:40    [21695563]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
тоже и в NDS! Ответ только 7 (и в 11g и в 12с)

declare
  lRslt pls_integer;
begin
  --execute immediate 'select :x1 + :x2 - :x3 from dual' into lRes using 5, '3', '1';
  execute immediate 'select :x1 - :x2 + :x3 from dual' into lRslt using 5, '1', '3';
  dbms_output.put_line ( 'lRslt: ' || lRslt );
end;      


7
4 окт 18, 17:43    [21695566]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
DBAshnik
Member

Откуда:
Сообщений: 225
andrey_anonymous
К примеру, ввести правило, по которому все параметры для анонимного динамически генерируемого pl/sql блока должны декларироваться:


ну да, придётся ввести такое правило, похоже. Раз такая пьянка....
4 окт 18, 17:46    [21695572]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16771
softwarer
попробуй угадать результат

Что тут угадывать? ORA-01722 или нормальное выполнение - как фишка ляжет.
4 окт 18, 17:48    [21695578]     Ответить | Цитировать Сообщить модератору
 Re: Я ****(запикано) дорогая редакция!" (в очередной раз с оракловских сообщениях об ошибках)  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 53869
Блог
andrey_anonymous,

вот уж в чьей способности ответить я не сомневался... :)
4 окт 18, 17:53    [21695589]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Oracle Ответить