Как я могу сделать запрос, который позволяет объединение двух строк?

Извините за вводящее в заблуждение название вопроса, потому что я не знал, как обобщить свой вопрос в одном предложении.

По сути, я хочу добиться того, чтобы пользователи могли искать то, что им нужно, в базе данных.

create table business
(post_code varchar2(8) not null,
company_name varchar2(50) not null,
code_name varchar2(58) constraint pk_business_compNo primary key,
address varchar2(100) not null);

Это таблица, где мы храним информацию о компаниях. post_code - это почтовый индекс компании. company_name - это название компании. code_name - это первичный ключ таблицы, а также объединение post_code и company_name . address является адресом компании

Затем я создал триггер для завершения объединения

CREATE OR REPLACE TRIGGER tr_uppercas
BEFORE INSERT ON business
FOR EACH ROW
BEGIN 
    IF:NEW.code_name IS NULL THEN
        SELECT replace(upper(:new.post_code),' ' ,'')||replace(upper(:new.company_name),' ','')
            INTO :NEW.code_name FROM DUAL;
    END IF;
END;
/
insert all
INTO business VALUES ('n1 9sV', 'HELLO WoRLD ltd', null, 'buckingham palace' )
SELECT * FROM DUAL;

поэтому, если я code_name эти данные, значением code_name будет N19SVHELLOWORLDLTD

Мой вопрос заключается в том, что если можно выполнить запрос SQL для поиска компании, предложив пользователям ввести значения для company_name и post_code а затем post_code эти значения, а затем сделать эти значения заглавными. В этом случае должно быть гарантировано найти значение code_name и компанию, которую мы ожидаем.

Любая помощь приветствуется!

Всего 1 ответ


Имейте в виду нормализацию таблиц, чтобы избежать нежелательных шагов. Добавьте числовое значение Pk в таблицу, чтобы оно вводилось с автоинкрементной последовательностью.

Create Table Business(
  post_code varchar2(8) not null,
  company_name varchar2(50) not null,
  id Number constraint pk_business_compNo primary key,
  address varchar2(100) not null
);

CREATE SEQUENCE customers_seq
 START WITH     1
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

insert all
INTO business VALUES ('n1 9sV', 'HELLO WoRLD ltd', customers_seq.nextval, 'buckingham palace' )
SELECT * FROM DUAL;

Теперь вашим фильтром будет название компании для поиска идентификатора или другого столбца

Select * From Business Where (company_name like '%' Or post_code like '%' Or address Like '%' );

В вашей модели это было бы так (Плохая практика):

Select  * 
From    Business 
Where   code_name Like '%'|| Param_user_company_name || '%' || Param_user_code_name || '%'

Есть идеи?

10000