Squeak.ru - шаблоны программирования

Как проверить существование значения входного параметра в виде списка по сравнению со значением переменной PL/SQL?

переменная С#

string val_1 = 'A','B','C';

Я передаю эту переменную как параметр метода PL/SQL и проверяю значение другой переменной в методе PL/SQL следующим образом:

Procedure x(val_1 IN VARCHAR2)
IS
    val_2  VARCHAR2(1):= 'A';
BEGIN
    IF (val_2 IN (val_1)) THEN
        dbms_output.put_line('matched');
    END IF;
END;

Это условие не работает. Любая идея, что я делаю неправильно?

01.09.2017

  • val_1 выглядит как просто строка, содержащая запятые и кавычки. Чтобы val_2 ему соответствовало, оно должно иметь значение 'A','B','C'. Вероятно, вам нужно передать массив вложенных таблиц и использовать if val_2 member of val_1 или ассоциативный массив и прокрутить его значения, или сохранить строку и сопоставить ее с помощью регулярного выражения. (Я бы сделал это ответом, но сейчас мне немного не хватает времени.) 01.09.2017
  • возможно if ','||val1||',' like '%,'||val2||',%' then ...? Однако ваша исходная строка выглядит немного подозрительно — вы действительно передаете 'A', 'B', 'C' или вы передаете A, B, C? 01.09.2017
  • Оба способа не работают 01.09.2017
  • Пожалуйста, ответьте на мой вопрос относительно точной строки, которую вы передаете. 01.09.2017
  • Да, я пробовал обе строки, но ни одна из них не работает 01.09.2017
  • Итак, какую именно строку вы передаете? Должна ли это быть одна строка, а не более стандартный массив или что-то в этом роде? 02.09.2017
  • @WilliamRobertson В моем случае это одна строка. 02.09.2017

Ответы:


1

var1 varchar2(1000) := 'a','b','c' - неверно
var1 varchar2(1000) := q'~ 'a','b','c'~'; - верно
var1 varchar2(1000) := 'a,b,c';- верно

somthing in (varchar2_variable) is incorrect. В оракуле такой конструкции нет.;

Пример простых решений. Но оба решения могут вызвать проблемы в будущем. Более гибкая версия с regexp

declare 
 var1 varchar2(1000)  := q'~ 'a','b','c' ~';
 to_test varchar2(100) := 'a';
begin 
 if instr(var1,to_test) > 0 then 
   dbms_output.put_line('Matched');
 end if; 
end;  

declare 
 var1 varchar2(1000)  := q'~ 'a','b','c' ~';
 to_test varchar2(100) := 'a';
begin 
 if regexp_instr(var1,to_test) > 0 then 
   dbms_output.put_line('Matched');
 end if; 
end;  
01.09.2017
  • Я думаю, вы не поняли мой вопрос должным образом. Переменная var_1 — это переменная C#, которая передается во время вызова метода PLSQL. 02.09.2017

  • 2

    Если вы можете передать массив, это становится намного проще.

    Создайте тип массива, если у вас его еще нет:

    create or replace type shortlist as table of varchar2(100);
    

    Используйте это как параметр вместо простой строки:

    create or replace procedure x
        ( val_1 in shortlist )
    is
        val_2 varchar2(1) := 'A';
    begin
        if val_2 member of val_1 then
            dbms_output.put_line('matched');
        end if;
    end;
    

    Вызовите процедуру:

    begin
        x(shortlist('A','B','C'));
    end;
    

    или как-то определить массив на С# (я не знаю С#)

    string[] names = new string[3] {"A", "B", "C"};
    

    и вызовите процедуру, как описано здесь: Передача массива в процедуру Oracle из c#< /а>

    02.09.2017
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...