CREATE OR REPLACE PROCEDURE Spq_proc_arg_type(
  m_objname in varchar2,
  m_colid in number,
  m_coltype out varchar2
) is
NO_DATA_FOUND exception;
begin  select data_type into m_coltype
  from sys.dba_arguments
  where object_name = m_objname
  and position=m_colid;
 IF (m_coltype is null ) THEN --(???????????)
    RAISE NO_DATA_FOUND;
  END IF;
exception
WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('no data found');
end
;
ORA-01422实际返回的行数超出请求的行数

解决方案 »

  1.   

     select data_type into m_coltype
      from sys.dba_arguments
      where object_name = m_objname
      and position=m_colid;
    这句的问题
      

  2.   

    我应该怎么改这个
    CREATE OR REPLACE PROCEDURE Spq_proc_arg_type(
    m_objname in varchar2,
    m_colid in number,
    m_coltype out varchar2
    ) is
    NO_DATA_FOUND exception;
    beginselect data_type into m_coltype
    from sys.dba_arguments
    where object_name = m_objname
    and position=m_colid;
    IF (m_coltype is null ) THEN --(???????????)
    RAISE NO_DATA_FOUND;
    END IF;
    exception
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('no data found');
    end
    ;
    ORA-01422实际返回的行数超出请求的行数
      

  3.   

    select data_type into m_coltype
      from sys.dba_arguments
      where object_name = m_objname
      and position=m_colid;into m_coltype 只能赋予一个单行值,你的查询出来的是多行或者无值都会报错
      

  4.   

    问题是符合你这个where条件的有多行记录,即select出来了多个 data_type ,但是 into的时候只允许是一个。所以可以用max或者min 取最大或者最小的。具体的取值方法需要根据你需求定
      

  5.   

    我在where 里面加一个 rownum=1 可以解决问题不?
      

  6.   

    可以,但是这么玩不靠谱呀
    如果有多条记录的话,你这个 data_type 是想怎么取值的?
      

  7.   

    可以,但是这么玩不靠谱呀
    如果有多条记录的话,你这个 data_type 是想怎么取值的?
    那这个我因该怎么改啊
      

  8.   

    可以,但是这么玩不靠谱呀
    如果有多条记录的话,你这个 data_type 是想怎么取值的?
    那这个我因该怎么改啊  那得问你自己的逻辑,有多个值该怎么取值  ,但是一般来说 给变量赋值在oracle一般都会事先判断值存不存在,值个数等等  ,当然这只是我的经验