Arhn - архитектура программирования

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

У меня есть процедура, которая передает строковое значение, которое, в свою очередь, передается в функцию. Мне нужно создать переменную переданной строки, чтобы отразить только первые 3 символа для использования в подобном предложении where.

Не уверен, как бы я это сделал, приведенная ниже функция будет передавать in_mod, например, «abc 123 def» в моем операторе select. Я хочу эффективно использовать только первые 3 переданных символа, поэтому предложение where оценивается как And AND AW_ACTIVE_ALARMS.module LIKE абв||'%';

CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm
    (in_site_id AW_ACTIVE_ALARMS.site_id%TYPE
    ,in_zone_id AW_ACTIVE_ALARMS.zone_id%TYPE
    ,in_mod AW_ACTIVE_ALARMS.module%TYPE)

RETURN NUMBER
IS

v_msm NUMBER;

BEGIN
    SELECT COALESCE(MAX(AW_ACTIVE_ALARMS.weight),0)
    INTO v_msm
    FROM AW_ACTIVE_ALARMS 
    WHERE AW_ACTIVE_ALARMS.site_id = in_site_id
    AND AW_ACTIVE_ALARMS.zone_id = in_zone_id
    AND AW_ACTIVE_ALARMS.module LIKE in_mod||'%'; 
RETURN (v_msm);

END sitezone_msm;
05.08.2015

  • Вы пробовали SELECT SUBSTR('ABCDEFG',3,4)? Вы можете заменить 3 (начальная точка) и 4 (сколько символов). Вы можете обернуть это вокруг любой строки, включая результат функции. 05.08.2015
  • durbnpoisn - добавить код, поскольку неясно, как я могу добиться того, что мне нужно 05.08.2015

Ответы:


1

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

CREATE OR REPLACE FUNCTION OPC_OP.sitezone_msm
    (in_site_id AW_ACTIVE_ALARMS.site_id%TYPE
    ,in_zone_id AW_ACTIVE_ALARMS.zone_id%TYPE
    ,in_mod AW_ACTIVE_ALARMS.module%TYPE)

RETURN NUMBER
IS

v_msm NUMBER;

BEGIN
    SELECT COALESCE(MAX(AW_ACTIVE_ALARMS.weight),0)
    INTO v_msm
    FROM AW_ACTIVE_ALARMS 
    WHERE AW_ACTIVE_ALARMS.site_id = in_site_id
    AND AW_ACTIVE_ALARMS.zone_id = in_zone_id
    AND AW_ACTIVE_ALARMS.module LIKE SUBSTR(in_mod,1,3)||'%'; 
RETURN (v_msm);

END sitezone_msm;
06.08.2015

2

Вот способ использования regexp_substr для захвата символов в начале строки перед первым пробелом. В случае, если правило действительно заключается в символах перед пробелом, а не только в первых трех (в случае, если это может быть переменное количество символов). Зависит от ваших данных.

AND AW_ACTIVE_ALARMS.module LIKE regexp_substr(in_mod, '^([^ ]*) ', 1, 1, null, 1)  ||'%'; 

Или, если вы предпочитаете regexp_replace:

AND AW_ACTIVE_ALARMS.module LIKE regexp_replace(in_mod, '^([^ ]*) (.*)', '\1')  ||'%'; 
05.08.2015
  • Спасибо за все отзывы, прошло несколько лет с тех пор, как я выполнял какие-либо PL/SQL - я попробовал приведенные выше предложения, и теперь функция возвращает ожидаемые значения. Спасибо за вашу помощь 05.08.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..