Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 можно ли сравнить переменную с данными из таблицы  [new]
Akezhan
Member

Откуда:
Сообщений: 3
как сравнить данные из таблицы с переменной
9 авг 17, 08:31    [20709819]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Akezhan
как сравнить данные из таблицы с переменной

Привет, а как ты их хочешь сравнить? напиши пожалуйста пример или что-нибудь что бы понять как именно ты хочешьих сравнивать )))
9 авг 17, 08:41    [20709828]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Akezhan,

Что-то типо того ))) ? :
declare 
  peremen integer;
  zn integer;
begin
  peremen:=1;
  select t.id
         into zn
      from ttable t
      where t.id=peremen; --Вот тут сравнение
  DBMS_OUTPUT.PUT_LINE(zn);
end;
9 авг 17, 08:49    [20709842]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
Akezhan,

Тебе уже ответил Stax в предыдущей твоей теме 20709835.

Не плоди десяток тем по одному вопросу. И почитай доку. Concepts, SQL reference и PL/SQL reference в первую очередь.
9 авг 17, 08:50    [20709845]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10750
Вы бы хоть соседние темы читали, прежде чем советы выдавать - пример использования агрегатной функции уже был.
9 авг 17, 08:51    [20709846]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
RMagistr2015,

Говнокод, напрашивающийся на NO_DATA_FOUND. Не советуй больше подобного.
9 авг 17, 08:53    [20709850]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
env
RMagistr2015,

Говнокод, напрашивающийся на NO_DATA_FOUND. Не советуй больше подобного.

Понял, спасибо
9 авг 17, 08:53    [20709851]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
в догонку

А также на TOO_MANY_ROWS, TYPE_MISMATCH и прочая, прочая, прочая....
9 авг 17, 08:54    [20709854]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
env,

тогда так:
declare 
  peremen integer;
  zn integer;
begin
  peremen:=1;
  select t.id
         into zn
      from ttable t
      where t.id=peremen; --Вот тут сравнение
  DBMS_OUTPUT.PUT_LINE(zn);
  
  exception when OTHERS then
      DBMS_OUTPUT.PUT_LINE('error');
end;
9 авг 17, 08:57    [20709860]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
RMagistr2015,

Зачем писать кусок кода, практически гарантированно дающий ошибку при малейшем шаге в сторону?
9 авг 17, 09:08    [20709878]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
Basil A. Sidorov,

Пошёл период "закрывающих хвосты". Сейчас будет всплеск тем "как получить 2, складывая 1 и 1, без малейших попыток прочитать учебник по арифметике?"
9 авг 17, 09:11    [20709882]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
env
RMagistr2015,

Зачем писать кусок кода, практически гарантированно дающий ошибку при малейшем шаге в сторону?


(заинтересованно) А какие шаги ты подразумеваешь например?
9 авг 17, 09:12    [20709885]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
RMagistr2015,

Все перечисленные выше.

Протестируй свой код на сценариях:

- тип данных поля в таблице не совпадает с типом сравниваемой переменной
- в таблице более одного поля с таким значением
- в таблице нет полей с таким значением
- переменная содержит NULL

И задумайся, можно ли по твоему коду понять, что пошло не так.
Я уж молчу о том, что в постановке ТС задача излишне абстрактная по своей сути и предполагает разные реализации для разных целей. От курсора по таблице с явным приведением типов и обработкой возможных исключений до банального select count(*) into from t where decode(t.field, l_variable, 0) = 0, в зависимости от того, что на самом деле надо по постановке задачи.
9 авг 17, 09:50    [20709982]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 175
RMagistr2015, env,

Да начнется срач..
9 авг 17, 10:09    [20710054]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6695
saxarock,

А надо? В этой теме он себя вполне прилично ведёт. Даже помочь пытался, как сумел.
Другой вопрос, качество этой помощи...
9 авг 17, 10:11    [20710058]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
saxarock
Member

Откуда: ЕКБ
Сообщений: 175
env,

нормально написал парень

exception when OTHERS then
      DBMS_OUTPUT.PUT_LINE('error');
люблю такие штуки, почему упало хз, становится понятно зачем ты в конторе нужен.
9 авг 17, 10:43    [20710170]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
saxarock,
Ничего скучнее чем срач не видел.
saxarock
exception when OTHERS then
      DBMS_OUTPUT.PUT_LINE('error');
люблю такие штуки...

ТС действительно несовсем конкретно поставил задачу, поэтому я и задал вопрос:
RMagistr2015
Что-то типо того ))) ? :


env,
порылся в exception, вот что получилось ))) :
declare 
  peremen integer:=1+null;
  zn integer:=0;
begin
  select t.client_id
         into zn
      from ttable t
      where t.id=peremen;
  DBMS_OUTPUT.PUT_LINE(zn);
  exception 
    when TOO_MANY_ROWS then
      DBMS_OUTPUT.PUT_LINE('return more than one value'); --select вернул больше одного значения
    when no_data_found then
      DBMS_OUTPUT.PUT_LINE('No such values'); --select ничего не вывел, сюда же попало условие - если переменная содержит NULL
    when INVALID_NUMBER then
      DBMS_OUTPUT.PUT_LINE('INVALID NUMBER'); --переменная не число
end;
9 авг 17, 12:13    [20710418]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7125
RMagistr2015
saxarock,
Ничего скучнее чем срач не видел.
saxarock
exception when OTHERS then
      DBMS_OUTPUT.PUT_LINE('error');
люблю такие штуки...

ТС действительно несовсем конкретно поставил задачу, поэтому я и задал вопрос:
RMagistr2015
Что-то типо того ))) ? :


env,
порылся в exception, вот что получилось ))) :
declare 
  peremen integer:=1+null;
  zn integer:=0;
begin
  select t.client_id
         into zn
      from ttable t
      where t.id=peremen;
  DBMS_OUTPUT.PUT_LINE(zn);
  exception 
    when TOO_MANY_ROWS then
      DBMS_OUTPUT.PUT_LINE('return more than one value'); --select вернул больше одного значения
    when no_data_found then
      DBMS_OUTPUT.PUT_LINE('No such values'); --select ничего не вывел, сюда же попало условие - если переменная содержит NULL
    when INVALID_NUMBER then
      DBMS_OUTPUT.PUT_LINE('INVALID NUMBER'); --переменная не число
end;


Если Вы никак не обрабатываете exception, проще вывести стандартное сообщение
Разве что хочется обругать по русски криворукого пользователя.

Но, в любом случае, все неизвестные exception, нужно выводить во вменяемом виде:

Дока
Example 10-11, "Displaying SQLCODE and SQLERRM"
Example 13-6, "Using SQLCODE and SQLERRM"

...
      WHEN OTHERS THEN
         v_code := SQLCODE;
         v_errm := SUBSTR(SQLERRM, 1 , 64);
         DBMS_OUTPUT.PUT_LINE('Error code ' || v_code || ': ' || v_errm);
9 авг 17, 12:23    [20710457]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
mRdUKE
Member

Откуда: ТЛТ
Сообщений: 494
Vadim Lejnin
Но, в любом случае, все неизвестные exception, нужно выводить во вменяемом виде:
...
v_code := SQLCODE;
v_errm := SUBSTR(SQLERRM, 1 , 64);
...
или,
... sys.dbms_utility.format_error_stack||sys.dbms_utility.format_error_backtrace ...
9 авг 17, 13:01    [20710569]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
Азагаш
Member

Откуда:
Сообщений: 450
проблема, как я понимаю, не в недостаточной обработке ошибок, а в их излишней генерации. вообще, есть вопрос по коду, зачем выбирать значение t.id, да еще и складывать это значение в переменную, если мы и так знаем, что это peremen (ну или все упадет)?
9 авг 17, 13:11    [20710605]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Вот так вот, благодаря "добродетели", вопрос по незнанию SQL наибанальнейшего select-where, перерос в обсуждение как лучше скрыть ошибку PL/SQL. Сразу в null или сначала записать в dbms_output.
9 авг 17, 13:20    [20710645]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Азагаш
проблема, как я понимаю, не в недостаточной обработке ошибок, а в их излишней генерации. вообще, есть вопрос по коду, зачем выбирать значение t.id, да еще и складывать это значение в переменную, если мы и так знаем, что это peremen (ну или все упадет)?


Это для примера - Что-то типо того )))
А так возможны любые варианты появления там значения, ТС не уточнил )))
Это я так понял абстрактная задача, где не рассматриваются способы появления значения в переменной, а рассматривается сравнение со значениями в таблице в колонке...
(заинтересованно) А что вы имеете ввиду говоря об ошибках под - а в их излишней генерации...? )))
9 авг 17, 13:22    [20710651]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
RMagistr2015,

А что вы имеете ввиду говоря об ошибках под фразой - а в их излишней генерации...? )))
9 авг 17, 13:23    [20710656]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Азагаш ))))

RMagistr2015
RMagistr2015,

А что вы имеете ввиду говоря об ошибках под фразой - а в их излишней генерации...? )))


Этот вопрос тебе )))
9 авг 17, 13:24    [20710658]     Ответить | Цитировать Сообщить модератору
 Re: можно ли сравнить переменную с данными из таблицы  [new]
Lary Denis
Guest
оракловая ветка так изголодалась по интересным темам, что люди готовы браться за любую задачу, даже к которой нет ни требований, ни нормального описания.

И что самое грустно, советы дает Rясельник2099.
9 авг 17, 13:28    [20710676]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить