下面是一个sql server2005的存储过程中的一条语句
select @khbhlen=convert(int,csz) from dz_xtcs where cslb=22 and csxh=4
我要把这条语句改成Oracle存储过程,改后如下:
select to_number(SVALUE) into t_sclientidlen from btc_syspar where IPARTYPE=22 and IPARID=4;
但是调试的时候报错,错误信息如下:
Error: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
       
          begin function package pragma procedure subtype type use
          <an identifier> <a double-quoted delimited-identifier> form
          current cursor
       The symbol "begin" was substituted for "SELECT" to continue.
请问大家,应该怎样改啊

解决方案 »

  1.   

    提示你了select into必须在过程体中。
    SVALUE是什么类型的,如果是int类型不需要to_number;
    把你完整代码贴出来。
      

  2.   

    原文件很大,只贴出一部分:
    sql server的
    declare @khbhlen int
    select @khbhlen=convert(int,csz) from dz_xtcs where cslb=22 and csxh=4
    declare @usesysclientno int
    select @usesysclientno=convert(int,csz) from dz_xtcs where cslb=22 and csxh=11Oracle的
    declare t_sclientidlen number;
    select to_number(SVALUE) into t_sclientidlen from btc_syspar where IPARTYPE=22 and IPARID=4;
    declare t_sysclientno number;
    select to_number(SVALUE) into t_sysclientno from btc_syspar where IPARTYPE=22 and IPARID=11;
    svalue是varchar类型的。。
      

  3.   

    select to_number(SVALUE) into t_sclientidlen from btc_syspar where IPARTYPE=22 and IPARID=4;
     放到begin段不能再变量定义中
      

  4.   

    oracle的procedure标准格式declare
    ...
    begin
    ..
    Exception
    ..
    end;declare和Exception可以没有,但begin..end必须有.
      

  5.   

    -- 给你个例子:-- 如果SELECT返回多个值就只能用游标或数组去接收结果集, 下面是游标的方式:CURSOR CUR_USCN IS
    SELECT TO_NUMBER(CSZ) FROM DZ_XTCS WHERE CSLB=22 AND CSXH=11;-- 如果SELECT返回1个值:
    SELECT TO_NUMBER(CSZ) INTO T_SYSCLIENTNO FROM DZ_XTCS WHERE CSLB=22 AND CSXH=11;
    -- T_SYSCLIENTNO 要在DECLARE后面定义.DECLARE
    ...
    T_SYSCLIENTNO NUMBER := 0;
    ...
    BEGIN
    ...
    END;