存储过程中拼接sql的示例
create or replace package body CRF_CMS_DOCTOR_PKG is
--根据医院查询医生
PROCEDURE P_HOSPITALBYDOCTOR_LIST
(
v_HOSPITAL_ID IN NUMERIC,
v_DEPT_ID IN NUMERIC,
v_JOBTITLE_ID IN NUMERIC,
v_USER_NAME IN VARCHAR2,
v_MOBILE IN VARCHAR2,
v_DIMDOCTOR_LIST OUT DOCTDRSOR
)
IS
v_SQL VARCHAR2(256);
v_Where VARCHAR2(256);
v_StrEnd VARCHAR2(16);
v_Length NUMBER(8);
BEGIN
--v_SQL:='SELECT USER_NAME,MOBILE,SEX,HOSPITAL_ID,DEPT_ID,JOBTITLE_ID,CREATE_TIME,UPDATE_USER_ID FROM T_DOCTOR_INFO WHERE HOSPITAL_ID like ''%';
v_SQL:='SELECT USER_NAME,MOBILE,SEX,HOSPITAL_ID,DEPT_ID,JOBTITLE_ID,CREATE_TIME,INTRODUCE FROM T_DOCTOR_INFO ';
v_Where:='WHERE ';
IF v_HOSPITAL_ID>0 THEN
v_Where:=v_Where||'HOSPITAL_ID='||TO_CHAR(v_HOSPITAL_ID);
v_Where:=v_Where||' AND';
END IF;
IF v_DEPT_ID>0 THEN
v_Where:=v_Where||' DEPT_ID='||TO_CHAR(v_DEPT_ID);
v_Where:=v_Where||' AND';
END IF;
IF v_JOBTITLE_ID>0 THEN
v_Where:=v_Where||' JOBTITLE_ID='||TO_CHAR(v_JOBTITLE_ID);
v_Where:=v_Where||' AND';
END IF;
IF v_MOBILE<>'00000000000' THEN
v_Where:=v_Where||' MOBILE LIKE ';
v_Where:=v_Where||'''%';
v_Where:=v_Where||v_MOBILE;
v_Where:=v_Where||'%''';
v_Where:=v_Where||' AND';
END IF;
IF v_USER_NAME<>'aaaaaaaaaa' THEN
v_Where:=v_Where||' USER_NAME LIKE ';
v_Where:=v_Where||'''%';
v_Where:=v_Where||v_USER_NAME;
v_Where:=v_Where||'%''';
END IF;
v_Length:=length(v_Where);
v_StrEnd:=substr(v_Where,v_Length-2);
IF v_StrEnd='AND' THEN
v_Where:=substr(v_Where,0,v_Length-4);
END IF;
v_Length:=length(v_Where);
v_SQL:=v_SQL||v_Where;
OPEN v_DIMDOCTOR_LIST FOR v_SQL;
--select * from T_DOCTOR_INFO where HOSPITAL_ID like '%%';
end P_HOSPITALBYDOCTOR_LIST;
end CRF_CMS_DOCTOR_PKG;
注意:要想在存储过程中判断传过来的字符串是否为空,可以写成
IF v_MOBILE not null THEN .....
存储过程中拼接sql的示例的更多相关文章
- 存储过程中拼接SQL语句
很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANS ...
- 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数.该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件. begin DECLA ...
- 存储过程中拼接sql并且参数化
ALTER PROCEDURE [dbo].[proc_test] ( ) = ' order by id desc ', @userid int, @stime datetime, @etime d ...
- sqlserver 存储过程中拼接sql语句 动态执行
ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @grad ...
- 解决存储过程中拼接的SQL字符串超长导致sql语句被截取的问题
今天遇到了一个奇葩的问题:存储过程中的sql字符串拼接的太长,超出了分页存储过程执行sql参数的nvarchar(4000)的长度. 没办法,只能修改自己的存储过程,因为分页存储过程是不能动的. 开始 ...
- MSSQL存储过程实现拼接sql的注意点
这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改.由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面. 这里就出现了一个问题,我花费 ...
- mysql 存储过程动态拼接sql并执行赋值
)) BEGIN ## 定义变量 ,) ; ## @表示全局变量 相当于php $ ## 拼接赋值 INTO 必须要用全局变量不然语句会报错 SET @strsql = CONCAT('SELECT ...
- SQL Server数据库存储过程中拼接字符串注意的问题
在SQL Server数据库中书写复杂的存储过程时,一般的做法是拼接字符串,最后使用EXEC sp_executesql '拼接的字符串' 查询出结果. 先看一段代码: -- ============ ...
- Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量
请看黄色部分 --区县指标 THEN TVALUE_SQL := 'SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END ...
随机推荐
- websocket nova vnc proxy
1. vnc proxy的实现原理 vnc 是nova提供的用来访问虚拟机的一项重要功能,用户可以通过websocket来访问,也可以通过java客户端来访问.通过websket访问虚拟机 的功能已经 ...
- OpenStack入门之初步认识
一.OpenStack 入门 之 基础知识 二.OpenStack 入门 之 基本组件 三.OpenStack 入门 之 各组件解析(基础) 四.OpenStack 入门 之 各组件解析(进阶) 五. ...
- hdu 1292分组(dp)
考虑一支队伍分组的数目,如果这支队伍有n个人,就有n种情况分别是一个组,两个组.... i个人分成j组有两种方式,一种是i-1个人分成j-1组之后,第i个人独立分成一组,另一种情况是i-1个人分成j组 ...
- mac上安装redis
1.从http://redis.io 下载redis包,这里选择了redis-3.2.3 2.将下载的 redis-3.2.3.tar.gz 包拷贝到 /user/local 目录 3.执行 sudo ...
- POJ1505:Copying Books(区间DP)
Description Before the invention of book-printing, it was very hard to make a copy of a book. All th ...
- ssh远程连接不上ubuntu
问题描述: 1.ubuntu安装了openssh-server,启动了ssh 守护进程,使用端口22 2.在本机可以 ssh 127.0.0.1 连接 3.通过ssh远程(比如用putty 或crt) ...
- jpeg和gif已经影响互联网发展进程了,他们应该被历史淘汰了!!!
本人发现.传统的图片格式已经不适应互联网时代了!!!,故本人发起定义一种新的图片格式.后缀名为 .gnet 互联网上的图片大多有这几种来源.微博上传,视频截图,网络编辑人上传等,以眼下的技术.这些图片 ...
- 重学《C#高级编程》(对象与类型)
昨天重看了下<C#高级编程>里面的对象与类型一章,发现自己有许多遗漏没懂的地方重新弄清楚明白了 先说说什么是对象吧,我个人的感觉是:在编程的世界里,一段程序就是一个事物的处理逻辑,而对象就 ...
- HDU3756
题意:给定三围空间里面某些点,求构造出一个棱锥,将所有点包含,并且棱锥的体积最小. 输入: T(测试数据组数) n(给定点的个数) a,b,c(对应xyz坐标值) . . . 输出: H(构造棱锥的高 ...
- nyoj 36
//这一题是 nyoj 36 是一道求最长公共子序列的题,也是用dp做出来的 核心代码也就是一句,题目大概思路是先找到两组字符串里面相同的字母 在二维数组里面更新每次比较过后dp的值,空想很难理解 ...