CREATE OR REPLACE PROCEDURE isnumber (a VARCHAR2)
AS
   v_a   NUMBER;
BEGIN
   SELECT TO_NUMBER (a)
     INTO v_a
     FROM DUAL;   DBMS_OUTPUT.put_line ('a is a number');
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('a is not a number');
END;
/

解决方案 »

  1.   

    楼主的几个错误:
    1、在存储过程中SELECT推出的结果必须到一个变量中,即有SELECT 就要有INTO
    2、语句结尾要用分号;
    3、SELECT to_number('a') FROM DUAL中 
       不应该用'a',而是用a,用'a'是一个字符常量
      

  2.   

    另外,如何执行修改后的存储过程,
    SQL> SET SERVEROUTPUT ON
    SQL> EXEC ISNUMBER('123');
    SQL> EXEC ISNUMBER('123ab');
      

  3.   

    create or replace procedure isnumber
    (
    a varchar2
    )     
    as
    aa number;
    begin
    select to_number('a') into aa from dual;
    if SQL%ROWCOUNT>0 
    then 
    dbms_output.put_line('a is a number');
    else  
    dbms_output.put_line('a is not a number');
    end if;
    end;这样就没错,但SQL%ROWCOUNT 是什么意思?
      

  4.   

    谢谢你们!
    我想问下zcs_1(生生不息):为什么你没有用if SQL%ROWCOUNT>0 来判断,也能正确创建这个存储过程,dbms_output.put_line()?
      

  5.   

    SQL%ROWCOUNT :我就是用来判断,上面的那个sql语句有没有返回行的