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

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

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

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 будет равно N19SVHELLOWORLDLTD

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

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

1 Ответ

1 голос
/ 17 мая 2019

Имейте в виду нормализацию таблиц, чтобы избежать нежелательных шагов. Добавьте числовое значение 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 || '%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...