Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 27.04.2017
Сообщений: 5

SQL процедура

27.04.2017, 19:54. Показов 1065. Ответов 9

Студворк — интернет-сервис помощи студентам
Написать процедуру на Oracle SQL. Вводится строка, в ответ выводится эта же строка с заменой слова в котором 2 и более букв "о" на количество символов в этом слове. Пример: "мы хорошо живем"-"мы 6 живем"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2017, 19:54
Ответы с готовыми решениями:

Процедура в PL/SQL, как запустить?
есть процедура create or replace procedure add_new_product (p_id IN Products.p_id%TYPE, c_name IN Category.cat_name%TYPE, pr_name...

Автоматически нумеровать первое поле в таблице, SQL процедура
Помогите создать процедуру которая будет автоматически нумеровать первое поле в таблице, первое значение должно начинаться с 2 , а каждая...

SQL процедура
Добрый вечер,помогите пожалуйста с составлением SQL процедуры. Вот что начал составлять и стопорнулся)) USE GO /****** Object: ...

9
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.04.2017, 22:17
Могут ли разделителями слов в предложении быть какие-то другие символы, кроме пробелов (запятые, например)?
Почитайте про семейство функций REGEXP_ ..., может, какие-то мысли в голову придут
0
0 / 0 / 0
Регистрация: 27.04.2017
Сообщений: 5
28.04.2017, 01:18  [ТС]
Да, могут быть любыми. Мысли в голову идут, но неясна их реализация и я подозреваю, что нехватает навыков(
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2017, 09:42
Цитата Сообщение от Sergo_may Посмотреть сообщение
Да, могут быть любыми
Не надо делать неряшливых постановок. Правильно ли я понимаю, что слова образуются буквами и/или цифрами, а все прочие символы являются разделителями слов? Какова максимальная возможная длина "предложения"? (От этого зависит тип входного параметра процедуры и дальнейшая работа с ним)
0
0 / 0 / 0
Регистрация: 27.04.2017
Сообщений: 5
28.04.2017, 09:48  [ТС]
Значит так. Только пробелы как разделительные символы. Длина входящей строки может быть до 100 символов. Строка содержит только слова и отдельные символы, без цифр
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2017, 09:56
Цитата Сообщение от Sergo_may Посмотреть сообщение
Написать процедуру на Oracle SQL
Маленькое замечание.
Нельзя написать процедуру на SQL, это декларативный язык, а не процедурный. Именно поэтому каждый производитель СУБД создает процедурное расширение SQL, у Oracle это PL/SQL.
0
0 / 0 / 0
Регистрация: 27.04.2017
Сообщений: 5
28.04.2017, 09:59  [ТС]
Прошу прощения, за мою неомпетентность. Еще новичок в этом деле и не до конца понимаю всю тонкость данной "машины"
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2017, 13:27
Можно получить результат в виде селекта
Кликните здесь для просмотра всего текста
SQL
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 xx AS (
    SELECT TRIM(regexp_replace(' мы  хорошо '||chr(9)||' живем '||chr(10),'\s+',' ')) str -- убираем повторные пробельные символы
    FROM dual
    )
,  yy AS (
    SELECT regexp_count(str,' ')+1 n_max        -- считаем число слов
    FROM xx
    )
,  zz AS (
    SELECT LEVEL n FROM dual, yy
    CONNECT BY LEVEL <=yy.n_max                 -- формируем номера строк
    )
SELECT TRIM(to_char(regexp_replace(regexp_replace(xmltype.getclobval(xmlagg(xmltype(word))),'<z>|</z>',' '),'\s+',' ')))
FROM (
SELECT '<z>'|| CASE WHEN zz IS NULL THEN word
               ELSE TRIM(nn) END||'</z>' word, n                -- разворачиваем новые слова по строкам
FROM (       
SELECT n, word, 
       REGEXP_SUBSTR(LOWER(word),'([о]).*\1', 1,1) zz,          --  проверяем наличие не менее двух "о"
       LENGTH(word) nn
FROM (
SELECT zz.n, regexp_substr(xx.str,'[^ ]+',1,zz.n)  word         --  достаем слова
FROM xx, zz
WHERE n<10
)) ORDER BY n )
;


Если будете делать функцию, ее (наверное) придется сделать с прагмой "автономная транзакция", иначе функция не будет работать в селектах

Добавлено через 1 минуту
Наверное, можно сделать проще, но я решил привести много примеров использования функций REGEXP_...

Добавлено через 9 минут
Как это ни смешно, но все компоненты данного селекта ранее встречались в темах на этом самом форуме. Так что можно было просто поизучать архивы

Добавлено через 1 минуту
-----
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
28.04.2017, 13:30
Цитата Сообщение от AGK
ее (наверное) придется сделать с прагмой "автономная транзакция", иначе функция не будет работать в селектах
Requirements for Calling PL/SQL Functions from SQL Expressions

To be callable from SQL expressions, a user-defined PL/SQL function must meet
the following basic requirements:
- It must be a stored function, not a function defined within a PL/SQL block or subprogram.
- It must be a row function, not a column (group) function; in other words, it cannot take an entire column of data as its argument.
- All its formal parameters must be IN parameters; none can be an OUT or IN OUTparameter.
- The datatypes of its formal parameters must be Oracle Server internal types, such as CHAR, DATE, or NUMBER,
not PL/SQL types, such as BOOLEAN, RECORD, or TABLE.
- Its return type (the datatype of its result value) must be an Oracle Server internal type.
Про автономную транзакцию речи нет.
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
28.04.2017, 14:00
В селекте были ошибки (остатки отладки). Так будет вернее
Кликните здесь для просмотра всего текста
SQL
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
WITH xx AS (
    SELECT TRIM(regexp_replace(' мы  хорошо '||chr(9)||' живем '||chr(10),'\s+',' ')) str -- убираем повторные пробельные символы
    FROM dual
    )
,  yy AS (
    SELECT regexp_count(str,' ')+1 n_max        -- считаем число слов
    FROM xx
    )
,  zz AS (
    SELECT LEVEL n, yy.n_max
    FROM dual, yy
    CONNECT BY LEVEL <=yy.n_max                 -- формируем номера строк
    )
SELECT TRIM(to_char(regexp_replace(regexp_replace(xmltype.getclobval(xmlagg(xmltype(word))),'<йЙ>|</йЙ>',' '),'\s+',' ')))
FROM (
SELECT '<йЙ>'|| CASE WHEN zz IS NULL THEN word
               ELSE TRIM(nn) END||'</йЙ>' word, n                -- разворачиваем новые слова по строкам
FROM (       
SELECT n, word, 
       REGEXP_SUBSTR(LOWER(word),'([о]).*\1', 1,1) zz,          --  проверяем наличие не менее двух "о"
       LENGTH(word) nn
FROM (
SELECT zz.n, regexp_substr(xx.str,'[^ ]+',1,zz.n)  word         --  достаем слова
FROM xx, zz
WHERE n<=zz.n_max
)) ORDER BY n )
;


Поменял имя тэга на "йЙ", поскольку такого слова наверняка не будет

Добавлено через 1 минуту
И еще заменил 10, оставшееся от отладки, на n_max

Добавлено через 4 минуты
Цитата Сообщение от Grossmeister Посмотреть сообщение
Про автономную транзакцию речи нет.
Просто иногда сталкивался с диагностикой примерно следующего содержания: "Нельзя использовать в селекте функцию, содержащую DML-операции". Лечится автономной транзакцией (если такое возможно). Но сейчас не могу точно сказать, были ли там только селекты, или, возможно, еще delete и update

Добавлено через 5 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2017, 14:00
Помогаю со студенческими работами здесь

Процедура в SQL
Здравствуйте! Есть две таблицы: --Продажа (IDПродажа, Дата, IDКлиента, Сумма), --Автомобиль (IDАвто, IDПродажа, Марка, Фирма,...

процедура pl\sql
Здравствуйте. Пожалуйста подскажите, как это реализовать: У меня имеется таблица Clients со столбцами: id, name, age, country. ...

Хранимая процедура SQL
INSERT INTO Beka.dbo.Tabl3(Id, Imei) SELECT t1.Id, t1.Imei FROM Tabl1 AS t1 INNER JOIN Tabl2 AS t2 ON t1.Imei = t2.Imei;Всем привет!...

SQL процедура с параметрами
Здравствуйте. Такая проблема: я не силен в sql, а мне по зарез нужна процедура с тремя параметрами, которая выбирает данные из таблицы на...

SQL хранимая процедура
INSERT INTO Beka.dbo.Tabl3(Id, Imei) SELECT t1.Id, t1.Imei FROM Tabl1 AS t1 INNER JOIN Tabl2 AS t2 ON t1.Imei = t2.Imei; Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru