CREATE OR REPLACE PROCEDURE Emr_GetRecipe_Pat
(
Code_ in varchar2 ---拼音(输入的"项目"内容)
,TagText_ in varchar2 ---面板名称
,Type_ in varchar2 ---选择类型
,DoctorNo_ in varchar2 ---医生编号
,HisNb_ in varchar2 ---His内部号
,HisWb_ in varchar2 ---His外部号
,Ids_ in varchar2 ---病人Ids
)
AS
Patientno varchar2(100);
index_ integer;
HosCode varchar2(100);
Code varchar2(100);
TagText varchar2(100);
Type__ varchar2(100);
Ids varchar2(100);
BEGIN
Code:=Code_;
TagText:=TagText_;
Type:=Type_;
Ids:=Ids_;
indexs:= instr(Ids,',',1,3);
Patientno:=substr(Ids,1,indexs); ------拆分字符串函数 得到住院号
select 就诊医院 into HosCode
FROM SUPHISV3.EMR_PATIENTDATA_PAT u
WHERE u.住院号 = Patientno; IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;
END;
上面的sql脚本 执行的时候有问题,提示Encountered the symbol";" when expecting one of the following; if
的错误。如果我把 IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;这段去掉的话是可以编译通过的,请问各位高手这是什么问题,怎么样才能解决?
解决方案 »
- oracle ip访问问题
- 100分求惠普unix系统下安装ORACLE ,分不够再加
- 传授新手一个技巧,我在csdn上文了很多次都没有人回答,多亏一个朋友介绍。
- PRO*C程序预编译通过,但是联编出现LNK2001问题 (高分求助 !)
- DBMS_OUTPUT.PUTLINE(。。。没有显示。。
- ocisessionbegin:error while trying to retrieve text for error ora-24327
- 如何解决oracle8.05安装在window2000上的乱码问题?
- 急,不会弄?
- 求函数
- 急:ora-27101 shared memory realm does not exist 怎么办
- 创建表空间的疑惑……
- pl/sql备份数据
IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;
END IF; --语法问题,少了end if
IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;
end if;
IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;
else if(........)
begin
end;
这样的话 是不是每个end后面都要加end if ?
if ... then
...
elsif ... then
....
elsif ... then
....
else
...
end if;
Begin
Code:='嘱托'||Code;
end;
End if ;
请按gelyon的说明修改
(
Code_ in varchar2 ---拼音(输入的"项目"内容)
,TagText_ in varchar2 ---面板名称
,Type_ in varchar2 ---选择类型
,DoctorNo_ in varchar2 ---医生编号
,HisNb_ in varchar2 ---His内部号
,HisWb_ in varchar2 ---His外部号
,Ids_ in varchar2 ---病人Ids
)
AS
Patientno varchar2(100);
index_ integer;
HosCode varchar2(100);
Code varchar2(100);
TagText varchar2(100);
Type__ varchar2(100);
Ids varchar2(100);
BEGIN
Code:=Code_;
TagText:=TagText_;
Type__:=Type_;
Ids:=Ids_;
index_:= instr(Ids,',',1,3);
Patientno:=substr(Ids,1,index_); ------拆分字符串函数 得到住院号
select 就诊医院 into HosCode
FROM SUPHISV3.EMR_PATIENTDATA_PAT u
WHERE u.住院号 = Patientno; IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;
END IF;
IF (Type__ = '全部' and TagText != '出院带药') then
BEGIN
--药品
SELECT
代码 AS 代码
,通用名称 AS 通用名
,别名 AS 别名
,商品名称 AS 商品名
,规格 AS 规格
,'' AS 产地
,通用拼音码 AS 拼音码
,to_char(通用五笔码)
AS 五笔码
,通用统计码 AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,医保比例 AS 医保比例
,NVL(儿童医保比例, '') AS 少儿比例
,NVL(老干部医保比例, '') AS 老干部比例
,医保编号 AS 医保编号
,基本剂量 AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,最小单位 AS 最小单位
,包装数量 AS 包装数量
,包装单位 AS 包装单位
,规格备注 AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,产地代码 AS 产地ID
,to_char(药房代码) AS 药房
,编号 AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_RECIPESDATA_PAT
WHERE 禁用标识 ='0'
--WITH(NOLOCK)
AND 单位编码=HosCode
and (通用名称 LIKE LOWER('%' || Code || '%')
OR 通用拼音码 LIKE LOWER('%' || Code || '%')) and rownum<=60;
END;
ELSIF (Type__ = '全部' and TagText = '出院带药') THEN
BEGIN
SELECT
代码 AS 代码
,通用名称 AS 通用名
,别名 AS 别名
,商品名称 AS 商品名
,规格 AS 规格
,'' AS 产地
,通用拼音码 AS 拼音码
,通用五笔码 AS 五笔码
,通用统计码 AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,医保比例 AS 医保比例
,NVL(儿童医保比例,'') AS 少儿比例
,NVL(老干部医保比例,'') AS 老干部比例
,医保编号 AS 医保编号
,基本剂量 AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,最小单位 AS 最小单位
,包装数量 AS 包装数量
,包装单位 AS 包装单位
,规格备注 AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,产地代码 AS 产地ID
,药房代码 AS 药房
,编号 AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_RECIPESDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('01', '02', '03')
--WITH(NOLOCK)
AND (通用名称 LIKE LOWER('%' || Code || '%')
OR 通用拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode and rownum<=60;
END;
END IF;
IF (Type__ = '药品$西成药') THEN
BEGIN
SELECT
代码 AS 代码
,通用名称 AS 通用名
,别名 AS 别名
,商品名称 AS 商品名
,规格 AS 规格
,'' AS 产地
,通用拼音码 AS 拼音码
,通用五笔码 AS 五笔码
,通用统计码 AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,医保比例 AS 医保比例
,NVL(儿童医保比例,'') AS 少儿比例
,NVL(老干部医保比例,'') AS 老干部比例
,医保编号 AS 医保编号
,基本剂量 AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,最小单位 AS 最小单位
,包装数量 AS 包装数量
,包装单位 AS 包装单位
,规格备注 AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,产地代码 AS 产地ID
,药房代码 AS 药房
,编号 AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_RECIPESDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('01', '02')
--WITH(NOLOCK)
AND (通用名称 LIKE LOWER('%' || Code || '%')
OR 通用拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=60
ORDER BY 通用拼音码;
END;
ELSIF (Type__ = '药品$中草药') THEN
BEGIN
SELECT
代码 AS 代码
,通用名称 AS 通用名
,别名 AS 别名
,商品名称 AS 商品名
,规格 AS 规格
,'' AS 产地
,通用拼音码 AS 拼音码
,通用五笔码 AS 五笔码
,通用统计码 AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,医保比例 AS 医保比例
,NVL(儿童医保比例,'') AS 少儿比例
,NVL(老干部医保比例,'') AS 老干部比例
,医保编号 AS 医保编号
,基本剂量 AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,最小单位 AS 最小单位
,包装数量 AS 包装数量
,包装单位 AS 包装单位
,规格备注 AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,产地代码 AS 产地ID
,药房代码 AS 药房
,编号 AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_RECIPESDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('03')
--WITH(NOLOCK)
AND (通用名称 LIKE LOWER('%' || Code || '%')
OR 通用拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=60
ORDER BY 通用拼音码;
END;
ELSIF (Type__ = '检查') THEN
BEGIN
SELECT * FROM
(
--医技套餐
SELECT
代码 AS 代码
,医技名称 AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,医技拼音码 AS 拼音码
,医技五笔码 AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,'' AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,'''' AS 最小单位
,包装数量 AS 包装数量
,'''' AS 包装单位
,'''' AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_CHECKGROUPDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('04')
AND (医技名称 LIKE LOWER('%' || Code || '%')
OR 医技拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=60
UNION
--检查明细
( SELECT
代码 AS 代码
,医技名称 AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,医技拼音码 AS 拼音码
,医技五笔码 AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,'' AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,'' AS 最小单位
,包装数量 AS 包装数量
,'' AS 包装单位
,'' AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_CHECKDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('04')
AND (医技名称 LIKE LOWER('%' || Code || '%')
OR 医技拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=60
)
) a
WHERE ROWNUM<=60
ORDER BY trim(类型),通用名;
END;
BEGIN
SELECT * FROM
(
--医技套餐
SELECT
代码 AS 代码
,医技名称 AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,医技拼音码 AS 拼音码
,医技五笔码 AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,'' AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,'' AS 最小单位
,包装数量 AS 包装数量
,'' AS 包装单位
,'' AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_CHECKGROUPDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('05','06')
--WITH(NOLOCK)
AND (医技名称 LIKE LOWER('%' || Code || '%')
OR 医技拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=30
UNION
(
SELECT
代码 AS 代码
,医技名称 AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,医技拼音码 AS 拼音码
,医技五笔码 AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,'' AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,'' AS 最小单位
,包装数量 AS 包装数量
,'' AS 包装单位
,'' AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_CHECKDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('05')
--WITH(NOLOCK)
AND (医技名称 LIKE LOWER('%' || Code || '%')
OR 医技拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=30
)
) a
WHERE ROWNUM<=60
ORDER BY trim(类型),通用名;
END;
ELSIF(Type__='手术') THEN
BEGIN
SELECT
代码 AS 代码
,医技名称 AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,医技拼音码 AS 拼音码
,医技五笔码 AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,'' AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,'' AS 最小单位
,包装数量 AS 包装数量
,'' AS 包装单位
,'' AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_CHECKDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('08')
--WITH(NOLOCK)
AND (医技名称 LIKE LOWER('%' || Code || '%')
OR 医技拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=60
ORDER BY 医技拼音码;
END;
ELSIF (Type__='其它') THEN
BEGIN
SELECT
代码 AS 代码
,医技名称 AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,医技拼音码 AS 拼音码
,医技五笔码 AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,(SELECT CLASS_NAME FROM SUPHISV3.EMR_checkType_pat
er WHERE er.CLASS_CODE = 类型代码)
AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,'' AS 基本剂量
,'' AS 单位
,基本单位 AS 基本单位
,'' AS 最小单位
,包装数量 AS 包装数量
,'' AS 包装单位
,'' AS 规格备注
,单价 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,单位编码 AS 医疗机构代码 --GJ 20110601
,是否组套 AS 组套标识 --GJ 20110601
FROM SUPHISV3.EMR_CHECKDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('06', '07', '09', '10', '11', '12')
--WITH(NOLOCK)
AND (医技名称 LIKE LOWER('%' || Code || '%')
OR 医技拼音码 LIKE LOWER('%' || Code || '%')) and 单位编码=HosCode AND ROWNUM<=60
ORDER BY 医技拼音码;
END;
ELSIF (Type__ = '嘱托') THEN
BEGIN
SELECT
Code AS 代码
,substr(Code,3,len(Code)-2) AS 通用名
,'' AS 别名
,'' AS 商品名
,'' AS 规格
,'' AS 产地
,'zt' AS 拼音码
,'zt' AS 五笔码
,'' AS 统计码
,'' AS 收费项目
,'嘱托' AS 类型
--,'' AS 类型
,'' AS 医保比例
,'' AS 少儿比例
,'' AS 老干部比例
,'' AS 医保编号
,0 AS 基本剂量
,'' AS 单位
,'次' AS 基本单位
,'' AS 最小单位
,0 AS 包装数量
,'' AS 包装单位
,'' AS 规格备注
,0 AS 单价
,(CASE TagText
WHEN '长期医嘱' THEN '长期'
WHEN '临时医嘱' THEN '临时'
WHEN '出院带药' THEN '出院带药'
END) AS 类别
,'' AS 产地ID
,'' AS 药房
,'' AS 编号 --GJ 20110601
,'' AS 医疗机构代码 --GJ 20110601
,'0' AS 组套标识 --GJ 20110601
From SUPHISV3.EMR_CHECKDATA_PAT
WHERE 禁用标识 = '0'
AND 类型代码 in('06', '07', '09', '10', '11','12') AND ROWNUM<=20
ORDER BY 类型代码;
END;
END IF;
End;我现在就是按照gelyon 说的那样改的,可是编译的时候老是不能通过有错误,但是没有具体说明那里错误。各位帮忙看看是那里的问题。
--报什么错误?错误信息是什么?
--初步看了哈你结构,没语法问题CREATE OR REPLACE PROCEDURE Emr_GetRecipe_Pat
(
Code_ in varchar2 ---拼音(输入的"项目"内容)
,TagText_ in varchar2 ---面板名称
,Type_ in varchar2 ---选择类型
,DoctorNo_ in varchar2 ---医生编号
,HisNb_ in varchar2 ---His内部号
,HisWb_ in varchar2 ---His外部号
,Ids_ in varchar2 ---病人Ids
)
AS
Patientno varchar2(100);
index_ integer;
HosCode varchar2(100);
Code varchar2(100);
TagText varchar2(100);
Type__ varchar2(100);
Ids varchar2(100);
BEGIN
Code:=Code_;
TagText:=TagText_;
Type__:=Type_;
Ids:=Ids_;
index_:= instr(Ids,',',1,3);
Patientno:=substr(Ids,1,index_); ------拆分字符串函数 得到住院号 --if开始
IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
Begin
Code:='嘱托'||Code;
End;
END IF; --第一个if结束
--if开始
IF (Type__ = '全部' and TagText != '出院带药') then
BEGIN
--药品
NULL;
END;
--if 分支
ELSIF (Type__ = '全部' and TagText = '出院带药') THEN
BEGIN
NULL;
END;
END IF; --if 结束 --if开始
IF (Type__ = '药品$西成药') THEN
BEGIN
NULL;
END;
ELSIF (Type__ = '药品$中草药') THEN
BEGIN
NULL;
END;
ELSIF (Type__ = '检查') THEN
BEGIN
NULL;
END;
ELSIF (Type__ = '化验') THEN
BEGIN
NULL;
END;
ELSIF(Type__='手术') THEN
BEGIN
NULL;
END;
ELSIF (Type__='其它') THEN
BEGIN
NULL;
END;
ELSIF (Type__ = '嘱托') THEN
BEGIN
NULL;
END;
END IF;
--if结束
End;
If(true) then
begin
.......................
end;
End if;
open v_cur for select * from ( select * from table1 union (select * from table2) ) a
这样查询的话,编译不通过。