如何进行允许两个字符串串联的查询?

时间:2019-05-17 15:02:18

标签: sql oracle plsql triggers

抱歉,我的问题标题令人困惑,因为我不知道如何用一个句子来概括我的问题。

基本上,我想要实现的是确保用户可以在数据库中准确搜索他们想要的内容。

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_codecompany_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

我的问题是,是否有可能通过提示用户输入company_namepost_code的值,然后将这些值连接起来,然后使这些值变为大写,进行SQL查询来搜索公司。在这种情况下,应该保证找到code_name的价值和我们期望的公司。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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;

现在,您的过滤器将是用于查找ID或另一列的公司名称

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 || '%';