powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обявить функцию внутри SQLPlus скрипта.
19 сообщений из 44, страница 2 из 2
Обявить функцию внутри SQLPlus скрипта.
    #39761125
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusСервер 12й , а скулплюс 11.Ой беда-печаль.
:(
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 17 19:10:28 2019

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

-- Казалось бы:
SQL> WITH
  2  FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
  3     pos BINARY_INTEGER;
FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
*
ERROR at line 2:
ORA-06553: PLS-103: Encountered the symbol "end-of-file" when expecting one of
the following:
:= . ( @ % ; not null range default character

-- Ещё много ругани порезано--

-- НО:
SQL> WITH
  2  FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2
  3  IS pos BINARY_INTEGER
  4  ; len BINARY_INTEGER
  5  ; BEGIN   pos := INSTR(url, 'www.')
  6  ; len := INSTR(SUBSTR(url, pos + 4), '.') - 1
  7  ; RETURN SUBSTR(url, pos + 4, len)
  8  ; END
  9  ; SELECT DISTINCT get_domain(catalog_url)
 10    FROM (select 'https://www.favorite.site' catalog_url from dual) product_information
 11  /

GET_DOMAIN(CATALOG_URL)
--------------------------------------------------------------------------------
favorite

SQL>
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761131
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxRascalBusrf_mail,

Ааааа, понял.
Спасибо.
Сервер 12й , а скулплюс 11.
И менять ничего нельзя, ибо с подрядчиком cпецифические отношения.


Ой беда-печаль.
:(

12-й с флешки запустите

....
stax

Нельзя флешку.
Вообще ничего нельзя, кроме ReadOnly SQLPlus.
Потому и мучаемся.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761134
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusПотому и мучаемся.
Уперлись в "функцию" - вот и мучаетесь.
99% уверен, что Вашу задачу можно решить в пределах SQL или продрав результирующий файл че-нибудь типа AWK.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761137
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- НО:
SQL> WITH
  2  FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2
  3  IS pos BINARY_INTEGER
  4  ; len BINARY_INTEGER
  5  ; BEGIN   pos := INSTR(url, 'www.')
  6  ; len := INSTR(SUBSTR(url, pos + 4), '.') - 1
  7  ; RETURN SUBSTR(url, pos + 4, len)
  8  ; END
  9  ; SELECT DISTINCT get_domain(catalog_url)
 10    FROM (select 'https://www.favorite.site' catalog_url from dual) product_information
 11  /

GET_DOMAIN(CATALOG_URL)
--------------------------------------------------------------------------------
favorite

SQL>




Фигассе хакинг!
Спасибо!
Сейчас попробую.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761143
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusSY,

Без Вашей подсказки мысли отсутствовали.
А с подсказкой догадываюсь, что WITH появился лишь в следующей (12ой) версии.
собственно, по теме уже всё сказано andrey_anonymous
.. просто позанудствую ..

- WITH в операторе select ораклового диалекта sql-языка появился ишшо в ( 9ой) версии
- поддержка with в select всякими гуями появилась несколько позже (в зависимости от конкретного гуя), (но тоже уже давно )
- поддержка декларации функций в WITH внутри select появилась еще позже - считайте относительно ~недавно таки в 12ой

вывод - не пользуйтесь устаревшими версиями чего-либо ожидая поддержки всего-самого ..
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761154
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishRascalBusSY,

Без Вашей подсказки мысли отсутствовали.
А с подсказкой догадываюсь, что WITH появился лишь в следующей (12ой) версии.
собственно, по теме уже всё сказано andrey_anonymous
.. просто позанудствую ..

- WITH в операторе select ораклового диалекта sql-языка появился ишшо в ( 9ой) версии
- поддержка with в select всякими гуями появилась несколько позже (в зависимости от конкретного гуя), (но тоже уже давно )
- поддержка декларации функций в WITH внутри select появилась еще позже - считайте относительно ~недавно таки в 12ой

вывод - не пользуйтесь устаревшими версиями чего-либо ожидая поддержки всего-самого ..

Наше руководство тоже так сказало.
И озадачило заапрейдится с Оракла до СКЛСервера от Майкрософта.
А подрядчик обиделся.
Поэтому и наслаждаемся мучениями.
:)
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761156
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninRascalBus,

сработает в любой версии sqlplus
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set serveroutput on
spool ...
declaration
...
function xxx(...) as 
...
begin
for x in ( select * from table) loop
dbms_output.put_line(xxx(x));
end loop;
end;
/



Всё заработало.
Спасибо большое!
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761158
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusandrey_anonymous
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- НО:
SQL> WITH
  2  FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2
  3  IS pos BINARY_INTEGER
  4  ; len BINARY_INTEGER
  5  ; BEGIN   pos := INSTR(url, 'www.')
  6  ; len := INSTR(SUBSTR(url, pos + 4), '.') - 1
  7  ; RETURN SUBSTR(url, pos + 4, len)
  8  ; END
  9  ; SELECT DISTINCT get_domain(catalog_url)
 10    FROM (select 'https://www.favorite.site' catalog_url from dual) product_information
 11  /

GET_DOMAIN(CATALOG_URL)
--------------------------------------------------------------------------------
favorite

SQL>




Фигассе хакинг!
Спасибо!
Сейчас попробую.

Магическое колдунство!
Спасибо за идею.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761161
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusorawishвывод - не пользуйтесь устаревшими версиями чего-либо ожидая поддержки всего-самого ..
Наше руководство тоже так сказало.
И озадачило заапрейдится с Оракла до СКЛСервера от Майкрософта.

Забавное руководство.
Вместо апгрейда до современной (поддерживаемой) версии уже приобретенного продукта ввалить бабла в новые лицензии и миграцию.
Ну-ну...

RascalBusВсё заработало.
...буфер dbms_output совсем не бездонный однако.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761163
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousRascalBusпропущено...

Наше руководство тоже так сказало.
И озадачило заапрейдится с Оракла до СКЛСервера от Майкрософта.

Забавное руководство.
Вместо апгрейда до современной (поддерживаемой) версии уже приобретенного продукта ввалить бабла в новые лицензии и миграцию.
Ну-ну...

RascalBusВсё заработало.
...буфер dbms_output совсем не бездонный однако.

Все вокруг агрейдятся с Оракла до СКЛ Сервера on site или в Azure, вот и они решили не отставать.

Да и по деньгам дешевле.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761192
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusВсе вокруг агрейдятся с Оракла до СКЛ Сервера on site или в Azure

"Миллионы леммингов не могут ошибаться" (с)

RascalBusвот и они решили не отставать.

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761239
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous...буфер dbms_output совсем не бездонный однако.И чем определяется его дно?
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761619
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicandrey_anonymous...буфер dbms_output совсем не бездонный однако.И чем определяется его дно?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
package sys.dbms_output ...
  procedure enable (buffer_size in integer default 20000);
...
  --      information is stored in the SGA. An error is raised if the
  --      buffer size is exceeded.  If there are multiple calls to enable,
  --      then the buffer_size is generally the largest of the values
  --      specified, and will always be >= than the smallest value
  --      specified.  Currently a more accurate determination is not
  --      possible.  The maximum size is 1,000,000, the minimum is 2000.
...
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761649
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, большой респект!

Задействовал в одном из запросов по статистике вызовов:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
with 
  function wait_seconds(i_seconds in number default 0) return number 
  is 
  begin dbms_lock.sleep(seconds => i_seconds)
;   return i_seconds
; end
; select q2.*, round(ratio_to_report(q2.ela_ms) over()*100,2) as pct from
(
  select parsing_schema_name, sql_id, command_type, sql_text
       , lead(executions, 1) over(partition by sql_id, child_number order by snap) - executions as execs
       , (lead(cpu_time, 1) over(partition by sql_id, child_number order by snap) - cpu_time) / 1000 as cpu_ms
       , (lead(elapsed_time, 1) over(partition by sql_id, child_number order by snap) - elapsed_time)/ 1000 as ela_ms
       , lead(buffer_gets, 1) over(partition by sql_id, child_number order by snap) - buffer_gets as buff
    from (select 1 snap, s.parsing_schema_name, s.command_type, sql_id, sql_text, child_number, executions, cpu_time, elapsed_time, buffer_gets
            from v$sql s
           union all
          select 2 snap, s.parsing_schema_name, s.command_type, sql_id, sql_text, child_number, executions, cpu_time, elapsed_time, buffer_gets
            from v$sql s
           where wait_seconds(10) > 0  -- seconds
         ) q
) q2
where execs > 0
  and command_type = 47 -- 47 PL/SQL, 3 - SELECT
  and parsing_schema_name != 'SYS'
order by ela_ms desc
/
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761652
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

в древних версиях так было, теперь по умолчанию unlimited
Код: plsql
1.
2.
Usage: SET SERVEROUTPUT { ON | OFF } [SIZE {n | UNL[IMITED]}]
             [ FOR[MAT] { WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED] } ]


....
stax
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761658
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxв древних версиях так было, теперь по умолчанию unlimited
Вообще я цитировал текст из пакета с 12.1.
Впрочем, спасибо - теперь буду знать еще один способ заспамить серверную память :)
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761669
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxв древних версиях так было, теперь по умолчанию unlimited
Вообще я цитировал текст из пакета с 12.1.
Впрочем, спасибо - теперь буду знать еще один способ заспамить серверную память :)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 procedure enable (buffer_size in integer default 20000);
...
  --      information is stored in the SGA. An error is raised if the
  --      buffer size is exceeded.  If there are multiple calls to enable,
  --      then the buffer_size is generally the largest of the values
  --      specified, and will always be >= than the smallest value
  --      specified.  Currently a more accurate determination is not
  --      possible.  The maximum size is 1,000,000, the minimum is 2000.
...



мож коментарий не поправили, но всеравно странно в пакете default 20000,
а по умолчанию unlimited

Код: plsql
1.
SIZE sets the number of bytes of the output that can be buffered within the Oracle Database server. The default is UNLIMITED. n cannot be less than 2000 or greater than 1,000,000.


.....
stax
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761688
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxмож коментарий не поправили, но всеравно странно в пакете default 20000,
а по умолчанию unlimitedУмолчание unlimited это у sqlplusа. При этом в enable передается NULL.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39762206
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousElicпропущено...
И чем определяется его дно?
Код: plsql
1.
2.
package sys.dbms_output ...
  --      possible.  The maximum size is 1,000,000, the minimum is 2000.

Иногда вредно читать только коменты в исходниках.
set serverout on size unlimited появилось в бородатом 10g. Странно не запомнить такого.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
set serverout on size unlimited
begin
  for i in 1 .. 1000 * 10 loop
    dbms_output.put_line(rpad(i, 1000, '-'));
  end loop;
end;
/

...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обявить функцию внутри SQLPlus скрипта.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]