powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обявить функцию внутри SQLPlus скрипта.
44 сообщений из 44, показаны все 2 страниц
Обявить функцию внутри SQLPlus скрипта.
    #39760244
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем здоровья и удачи, други.

Ищу помощи в следующем, заранее извиняюсь за грамматику, русский для меня язык дополнительный.

Вводные:
База: Oracle 12c Standard Edition 12.1.0.2.0-64bit

Доступ к базе только ReadOnly и только через SQLPlus.
В базе ничего нельзя создавать (ни функции, ни процедуры, ничего совсем вообще никем никогда и низачто)

Задача:
Выгрузить содержимое таблицы в текстовый фаил , попутно обьявив и применив самодельную функцию.

Имеется следующий скрипт

Код: plsql
1.
2.
3.
spool c:\exp\cust.txt
Select name from cust;
spool off 


Хочется что-то типа:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Declare Function foo (iStr IN VARCHAR2) 
RETURN VARCHAR2 IS

BEGIN
RETURN 'ffOkin ' || iStr ;
END;

Select foo(name) from cust;
spool c:\exp\cust.txt
spool off



Тут cказали, что ето невозможно.

https://stackoverflow.com/questions/21856832/local-function-inside-pl-sql-script

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

1. Необходимость в функции не обоснована.
2. помимо with function есть dbms_output.
3. "только через SQLPlus" не обосновано.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760253
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Вопрос о логике функции не праздный. Если просто конкатенация строк - то используйте штатный || и забудьте.
Если что-то сложное (не так просто придумать сложную пользовательскую логику на RO-базе) - то, быть может, найдется альтернативное решение.
2. Вывод SQL*Plus ничто не мешает отправить в постобработку любым удобным/доступным методом.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760539
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, добрый человек Вячеслав Любомудров.

Это похоже то, что мне нужно.

Однако, скопировав и запустив код получаю ошибку.

Код: plsql
1.
2.
3.
4.
5.
ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:
Error at Line: 2 Column: 11



Подскажите, что я нетак делаю, пожалуйста.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760546
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия SQL*Developer? Версия базы?

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

Oracle Database Express Edition (XE) Release 18.4.0.0.0 (18c)
SQL Developer 18.4 Version 18.4.0-376.1900
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760577
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBus,

18C не имею.

На моем SQL*Developer 4.1.4.21 и базе 12.1.0.2.0 EE полет нормальный. А ORA-00905 говорит о том что версия базы не поддерживает WITH FUNCTION.

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
I:\>sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Wed Jan 16 17:05:12 2019

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

SQL> connect scott
Enter password:
Connected.
SQL> select  version
  2    from  v$instance
  3  /

VERSION
-----------------
10.2.0.5.0

SQL> with function f(
  2                  p_num number
  3                 )
  4         return number
  5         is
  6         begin
  7             return p_num;
  8         end;
  9  select  f(sal)
 10    from  emp
 11    where deptno = 10
 12  /
with function f(
              *
ERROR at line 1:
ORA-00905: missing keyword


SQL> connect scott@pdb1sol12
Enter password:
Connected.
SQL> select  version
  2    from  v$instance
  3  /

VERSION
-----------------
12.1.0.2.0

SQL> with function f(
  2                  p_num number
  3                 )
  4         return number
  5         is
  6         begin
  7             return p_num;
  8         end;
  9  select  f(sal)
 10    from  emp
 11    where deptno = 10
 12  /

    F(SAL)
----------
      2450
      5000
      1300

SQL>



Так-что ты либо конектишься не туда либо WITH FUNCTION в XE не поддерживается (c XE не работаю и посему не знаю что там обрeзано).

SY.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760582
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТак-что ты либо либо в функции ошибка.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760663
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusOracle Database Express Edition
В девелоперской базе и ReadOnly — это довольно странно.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39760698
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

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

Пойдем в в кофейню есть пирожки без мяса и думать о делах наших скорбных.

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

Пойдем в в кофейню есть пирожки без мяса и думать о делах наших скорбных.

Всем спасибо за помощь.

action plan:
1) Встать с дивана
2) надеть штаны

Пардон, чуток не так...
1) Запустить sqlplus
2) Научится копировать текст с консольного окна cmd.exe
3) скопировать полученный вывод в буфер обмена системы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select * from v$version;

WITH
 FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
   pos BINARY_INTEGER;
   len BINARY_INTEGER;
 BEGIN
   pos := INSTR(url, 'www.');
   len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
   RETURN SUBSTR(url, pos + 4, len);
 END;
SELECT DISTINCT get_domain(catalog_url)
  FROM product_information;
/



4) показать что получилось используя тэги форума SRC
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761046
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin,

Это результат на локально установленном Оракле.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select * from v$version;
------------------------------------------------------------------------------------

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
"CORE	11.2.0.2.0	Production"
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
WITH
 FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
   pos BINARY_INTEGER;
   len BINARY_INTEGER;
 BEGIN
   pos := INSTR(url, 'www.');
   len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
   RETURN SUBSTR(url, pos + 4, len);
 END;
SELECT DISTINCT get_domain(catalog_url)
  FROM product_information;
/
------------------------------------------------------------------------------------

ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:
Error at Line: 4 Column: 11
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761052
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761059
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBus,

И Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production не наводит ни на какие мысли?

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from v$version;

---------------------------------------------

Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
"CORE   12.1.0.2.0             Production"
TNS for 64-bit Windows: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production



Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
WITH
FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
   pos BINARY_INTEGER;
   len BINARY_INTEGER;
BEGIN
   pos := INSTR(url, 'www.');
   len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
   RETURN SUBSTR(url, pos + 4, len);
END;
SELECT DISTINCT get_domain(catalog_url)
  FROM product_information;

/

--Query result---------------------------------------------



ORA-06553: PLS-103: Encountered the symbol "end-of-file" when expecting one of the following:

   := . ( @ % ; not null range default character
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Error at Line: 4 Column: 1

--Script Output -------------------------------------------

Error starting at line 6 in command:
len BINARY_INTEGER
Error report:
Unknown Command

Error starting at line 7 in command:
BEGIN
   pos := INSTR(url, 'www.');
   len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
   RETURN SUBSTR(url, pos + 4, len);
END;

SELECT DISTINCT get_domain(catalog_url)
  FROM product_information;
Error report:
ORA-06550: line 7, column 1:
PLS-00103: Encountered the symbol "SELECT" 
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761100
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Без Вашей подсказки мысли отсутствовали.
А с подсказкой догадываюсь, что WITH появился лишь в следующей (12ой) версии.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761101
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusЭто результат на сервере ОраклТолько теперь снова вопрос про клиента.
Вот зачем тебе plsql-функция для выкусывания подстроки. Выражение, даже на инстр-субстр, короче, чем декларация функции.
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761102
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rf_mail,

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


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

сработает в любой версии 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 скрипта.
    #39761113
Фотография RascalBus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

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

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


Ой беда-печаль.Ещё не конец. DSQL в зубы …
...
Рейтинг: 0 / 0
Обявить функцию внутри SQLPlus скрипта.
    #39761117
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RascalBusrf_mail,

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


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

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

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


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