模糊查询 oracle语句,oracle数据库开发使用中模糊查询

在oracle数据库开发中,有时候需要写sql语句,然后直接返回到前台,所用的技术不再试传统的jdbc封装。

下面我举一个例子,这是我用oracle建包写的一个存储过程。

CREATE OR REPLACE PACKAGE Pkg_Note_d IS

-- Author  : ADMINISTRATOR

-- Created : 2016/5/25 10:41:34

-- Purpose : 短信例子

PROCEDURE Note_Add_d;

PROCEDURE Query_Note_d;

END Pkg_Note_d;

/

CREATE OR REPLACE PACKAGE BODY Pkg_Note_d IS

PROCEDURE Note_Add_d IS

--定义一个和note_dingwei一样表结构的变量。

l_Note_Dingwei Note_Dingwei%ROWTYPE;

BEGIN

--注册表

Pkg_Pub.Reg_Proc('PKG_NOTE_D.Note_Add_D');

--通过公共包获取数据

l_Note_Dingwei.Mobile := TRIM(Pkg_Pub.Getstring('mobile'));

l_Note_Dingwei.Note := TRIM(Pkg_Pub.Getstring('note'));

BEGIN

INSERT INTO Note_Dingwei

(n_Id,

Mobile,

Note,

Received_Time)

VALUES

(Note_Seq_d.Nextval,

l_Note_Dingwei.Mobile,

l_Note_Dingwei.Note,

To_Char(SYSDATE,

'yyyy-MM-dd HH24:MI:SS'));

EXCEPTION

WHEN Dup_Val_On_Index THEN

Pkg_Err.Raise_Error(10,

'短信录入失败,主键重复');

ROLLBACK;

WHEN OTHERS THEN

Pkg_Err.Raise_Error(15,

'短信录入失败');

ROLLBACK;

END;

COMMIT;

END Note_Add_d;

PROCEDURE Query_Note_d IS

l_Mobile  Note_Dingwei.Mobile %TYPE;

l_n_Id    Note_Dingwei.n_Id%TYPE;

l_Rcrdnm  INTEGER; --翻页行数

l_Cur_Sql VARCHAR2(2000); --查询语句

BEGIN

Pkg_Pub.Reg_Proc('PKG_NOTE_D.Query_Note_D');

l_Rcrdnm := Nvl(Pkg_Pub.Getnumber('rcrdnm'),

12);

l_Mobile := TRIM(Pkg_Pub.Getstring('mobile'));

l_n_Id := Nvl(TRIM(Pkg_Pub.Getstring('n_id')),

'1');

Dbms_Output.Put_Line(l_Mobile);

l_Cur_Sql := ' select n.* from ( select * from note_dingwei t where 1=1 ';

IF l_Mobile IS NOT NULL THEN

l_Cur_Sql := l_Cur_Sql || ' and t.mobile like ' || '''%' || l_Mobile ||

'%''';

END IF;

l_Cur_Sql := l_Cur_Sql || 'and t.n_Id >' || l_n_Id;

l_Cur_Sql := l_Cur_Sql || ' order by to_number(t.n_id) ) n';

l_Cur_Sql := l_Cur_Sql || ' where rownum <=' || l_Rcrdnm;

Dbms_Output.Put_Line(l_Cur_Sql);

Pkg_Pub.Set_Cursor_Sql(l_Cur_Sql);

Pkg_Pub.Clear_Proc('PKG_NOTE_D.Query_Note_D');

END;

END Pkg_Note_d;

/

在这里有一个点需要说一下' and t.mobile like ' || '''%' || l_Mobile || '%''';这里是英文的单引号。

oracle数据库会自动转义sql为 and t.mobile like '%l_Mobile%'。

给大家分享一下,希望能有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值