抱歉,我的问题标题令人困惑,因为我不知道如何用一个句子来概括我的问题。
基本上,我想要实现的是确保用户可以在数据库中准确搜索他们想要的内容。
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
我的问题是,是否有可能通过提示用户输入company_name
和post_code
的值,然后将这些值连接起来,然后使这些值变为大写,进行SQL查询来搜索公司。在这种情况下,应该保证找到code_name
的价值和我们期望的公司。
感谢您的帮助!
答案 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 || '%';