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;
/
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、在存储过程中SELECT推出的结果必须到一个变量中,即有SELECT 就要有INTO
2、语句结尾要用分号;
3、SELECT to_number('a') FROM DUAL中
不应该用'a',而是用a,用'a'是一个字符常量
SQL> SET SERVEROUTPUT ON
SQL> EXEC ISNUMBER('123');
SQL> EXEC ISNUMBER('123ab');
(
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 是什么意思?
我想问下zcs_1(生生不息):为什么你没有用if SQL%ROWCOUNT>0 来判断,也能正确创建这个存储过程,dbms_output.put_line()?