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;这段去掉的话是可以编译通过的,请问各位高手这是什么问题,怎么样才能解决?

解决方案 »

  1.   


        IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
           Begin
              Code:='嘱托'||Code;
           End;
        END IF;  --语法问题,少了end if
      

  2.   

        
        IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
           Begin
              Code:='嘱托'||Code;
           End;
        end if;
      

  3.   

    恩,我还想问一下,如果是
        IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
           Begin
              Code:='嘱托'||Code;
           End;
       else if(........)
           begin
           end;
    这样的话  是不是每个end后面都要加end if ?
      

  4.   

    你最好看看基本的if语法
    if ... then
    ...
    elsif ... then
    ....
    elsif ...  then
    ....
    else
    ...
    end if;
      

  5.   

        IF (substr(Code,1,2)!='嘱托' and Type__='嘱托') then
           Begin
              Code:='嘱托'||Code;
              end;
           End if ;
      

  6.   

    gelyon的分析是正确的.
    请按gelyon的说明修改
      

  7.   

    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_);    ------拆分字符串函数    得到住院号
     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;
      
      

  8.   

    接上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('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   说的那样改的,可是编译的时候老是不能通过有错误,但是没有具体说明那里错误。各位帮忙看看是那里的问题。
      

  9.   


    --报什么错误?错误信息是什么?
    --初步看了哈你结构,没语法问题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;
      

  10.   

    PL/SQL 與VB有點類似,語法結構是:
    If(true) then
     begin
     .......................
     end;
    End if;
      

  11.   

    对的,你begin...end 中间都是select ...from 查询语句,在PLSQL中不能这样,需要定义变量去接受结果集  select  ..into ...from ....这就要看你需求是什么样的了
      

  12.   

    我现在是这样弄的,定义了一个v_cur out sys_refcursor游标,然后再每个if的begin end里面,用open v_cur for select .....但是现在有个问题就是  查询里面用union 连接多个查询的时候
    open v_cur for select  * from ( select * from table1 union (select * from table2) ) a
    这样查询的话,编译不通过。