Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 26 27 28 29 30 31 32 33 34 [35]
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2017
xtender,

на https://apex.oracle.com
вот такое отрабативает
with function testf(prm varchar2) return нетип is
begin
   select count(*) into c from emp;
   return c;
end;
select 'abc' no_testf from dual

мож если не используется, то и не проверяет валидность
17 янв 19, 16:27    [21788106]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14995
Stax
мож если не используется, то и не проверяет валидность
Синтаксис plsql проверяет, но именно синтаксис. Разрешение имен и парсинг sql не производится. "select" обозначил начало sql-команды, содержимое до следующей запяточки, с учетом литералов и комментов, синтаксический анализатор plsql не волнует.
17 янв 19, 16:32    [21788111]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2017
-2-
Синтаксис plsql проверяет, но именно синтаксис.

with function testf(prm varchar2) return нетип is
begin
   select count(*) into c;
   return c;
end;
select 'abc' no_test from dual


select count(*) into c; синтаксис?

.....
stax
17 янв 19, 16:38    [21788121]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Stax
select count(*) into c; синтаксис?

А что не так?
Оптимизатор при парсинге выделил именованный синтаксически корректный pl/sql блок (т.е. кусок текста, соответствующий грамматике), далее элиминировал (ввиду невостребованности в запросе) и даже не стал передавать в pl/sql engine.
Соответственно ни объекты (переменная c не задекларирована), ни типы, ни права доступа не проверялись.
Но если допустить синтаксическую ошибку - то выделить pl/sql блок станет затруднительно, что повлечет exception.
17 янв 19, 19:35    [21788282]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52749
https://www.1cbit.ua/services/oracle/
Совместное использование 1С:Підприємство+Oracle позволит Вам:
Повысить скорость обработки данных даже при одновременной работе нескольких пользователей;
7 май 19, 17:29    [21880202]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 548
А если убрать 1С, вообще летать начнет :D
7 май 19, 17:38    [21880211]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52749
а почему тбл. DUAL так называется?
10 сен 19, 12:21    [21967608]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
grinn
Member

Откуда:
Сообщений: 20
andreymx
а почему тбл. DUAL так называется?

https://www.orafaq.com/wiki/Dual
The DUAL table was created by Chuck Weiss, an employee of Oracle Corporation. As it originally contained two rows, this table was named DUAL. He explained the purpose of DUAL in the January/February 2004 issue of Oracle Magazine as:

I created the DUAL table as an underlying object in the Oracle Data Dictionary. It was never meant to be seen itself, but instead used inside a view that was expected to be queried. The idea was that you could do a JOIN to the DUAL table and create two rows in the result for every one row in your table. Then, by using GROUP BY, the resulting join could be summarized to show the amount of storage for the DATA extent and for the INDEX extent(s). The name, DUAL, seemed apt for the process of creating a pair of rows from just one.
10 сен 19, 12:55    [21967657]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 593
Пару случаев из серии насколько креативными бывают альтернативно одарённые.

Вот такой запрос
select max(name) keep (dense_rank first order by id desc) mn, max(id) mid
  from t
 where id < :b

воспалённый ум может написать в таком виде
+
select *
  from (select *
          from (select max(name) mn, max(id) mid
                  from t
                 where id < :b
                 group by id
                union all
                select null, null from dual)
        order by mid desc nulls last)
 where rownum = 1


А если таблица соединяется с другой где гарантированно одна строка (получаемая относительно сложной логикой),
которая в случае не null используется как фильтр основной таблицы.

То есть
select *
  from t, single
where (t.id <> single.id or single.id is null)

Ну или так
select *
  from t, single
 where lnnvl(t.id = single.id)

(t.id по определению not null)

Творческий ум может родить такое
+
select *
  from t, single
 where not exists
          (select 1
             from single
            where t.id = single.id)
8 окт 19, 21:25    [21989867]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52749
Почему Оракле в merge требует скобок в
on (tdl1.id = tbl2.id)
напрягает

Сиквел более демократичен

Сообщение было отредактировано: 31 окт 19, 20:31
31 окт 19, 20:30    [22007563]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14995
andreymx
Почему Оракле в merge требует скобок в
on (tdl1.id = tbl2.id)
из-за многословности оператора его сложно воспринимать
merge into t1 using
(select 123 case, 'I' matched from dual) t2
on  f1 = case
    when matched = 'I' then 'insert' end 
    when matched       then  insert into t1(f1) values (case);
31 окт 19, 22:08    [22007591]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Antonnew
Member

Откуда:
Сообщений: 12
привет курильщики!

направьте чайника на верный путь, плиз

Что имеем
- Oracle SQL Dveloper - создал простую таблицу
- SQL plus - запрос

SQL> SELECT NAME, REP_OFFICE, HIRE_DATE FROM SALESREPS
2 /


Содержимое Name выводится с нечитаемыми символами, см скрин

вопрос: как исправить? что текст выводился в нормальном виде

К сообщению приложен файл. Размер - 145Kb
7 ноя 19, 14:15    [22011527]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Antonnew
Содержимое Name выводится с нечитаемыми символами, см скрин

...как же утомляют лентяи, не способные не только доку чтить, но даже гуглем пользоваться...
C:\>set nls_lang=.ru8pc866
C:\>sqlplus ...
7 ноя 19, 14:23    [22011537]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9475
Лучше
chcp 1215
7 ноя 19, 15:01    [22011594]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17717
Basil A. Sidorov
Лучше
chcp 1215

1251
Но научиться корректно управлять nls_lang полезнее :)
7 ноя 19, 15:12    [22011602]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9475
andrey_anonymous
1251
Да, ачипятался.
Но научиться корректно управлять nls_lang полезнее :)
Для OEM-ной кодовой страницы русского (886) вылазят разные "мелкие пакости". Поэтому - ANSI (1251).
А NLS_LANG оставить для указания "ангельского" языка сообщений.
7 ноя 19, 18:09    [22011794]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Antonnew
Member

Откуда:
Сообщений: 12
andrey_anonymous,
как же утомляют умники, не способные адекватно реагировать на вопросы новичков.
7 ноя 19, 21:16    [22011927]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 921
Antonnew,

Вы доку прочитали? Вы гуглoм пользовались для решения своей (тривиальной) проблемы ? Ваш вывод о неадекватной реакции Андрея говорит скорее о Вашей неадекватности и профессиональной непригодности, после творчества таких как Вы умным людям приходится обычно завалы разгребать ...

just imho
8 ноя 19, 00:27    [22011985]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14995
Maxim Demenko
вывод о неадекватной реакции Андрея
Выбор места и формы постановки вопроса говорит о возможном вбросе ради срача. Отвечать на вброс это, все же, неадекватная реакция.
8 ноя 19, 06:48    [22012019]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
конечно Вася
Member

Откуда: Брянщина
Сообщений: 181
-2-
Maxim Demenko
вывод о неадекватной реакции Андрея
Выбор места и формы постановки вопроса говорит о возможном вбросе ради срача. Отвечать на вброс это, все же, неадекватная реакция.


Не факт. Надо было просто тему обозначить "?". И пусть продолжает.
8 ноя 19, 08:23    [22012044]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14995
Помимо особенностей синтаксического разбора with function, есть нюансы времени выполнения
SQL> create or replace function funull(n number) return varchar2 as
  2  begin
  3    if n=2 then raise no_data_found; end if;
  4    return to_char(add_months(date '1-1-1', 12*(n-1)), 'yyyysp');
  5  end;
  6  /

Function created.

SQL> select dummy, funull(level) fn from dual connect by level<=3;

D FN
- --------------------
X one
X                       три строки 
X three

SQL> with function funull(n number) return varchar2 as
  2  begin
  3    if n=2 then raise no_data_found; end if;
  4    return to_char(add_months(date '1-1-1', 12*(n-1)), 'yyyysp');
  5  end;
  6  select dummy, funull(level) fn from dual connect by level<=3;
  7
  8  /

D FN
- --------------------
X one                   одна строка 

SQL>
11 ноя 19, 09:21    [22013250]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14995
-2-
Помимо особенностей синтаксического разбора with function, есть нюансы времени выполнения
Ну и на 19.3 с pragma UDF тоже приколы
SQL> create or replace function funull(n number) return varchar2 as
  2    pragma udf;
  3  begin
  4      if n=2 then raise no_data_found; end if;
  5    return to_char(add_months(date '1-1-1', 12*(n-1)), 'yyyysp');
  6  end;
  7  /

Function created.

SQL>
SQL> col fn format a10
SQL> select dummy, funull(level) fn from dual connect by level<=3;

D FN
- ----------
X one
X    
X three

SQL>
SQL> set serveroutput on
SQL> declare n number := 0;
  2  begin
  3    for c in (select dummy, funull(level) fn from dual connect by level<=3) loop
  4      n := n + 1;
  5      dbms_output.put_line(n||': '||c.fn);
  6    end loop;
  7  end;
  8  /
1: one
      
PL/SQL procedure successfully completed.
11 ноя 19, 09:41    [22013259]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2017
-2-,

в каждой версии по своему (апекс)

Oracle Database 18c EE Extreme Perf Release 18.0.0.0.0 - Production Version 18.7.0.0.0

одна строка
1: one

.....
stax
11 ноя 19, 11:00    [22013338]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 26 27 28 29 30 31 32 33 34 [35]
Все форумы / Oracle Ответить