试试这样: create or replace procedure CREATE_VALUE_CONSTRAINT AS v_maxvalue number; v_minvalue number; BEGIN ...... BEGIN v_maxvalue := TO_NUMBER(TRIM(MAXVALUE)); v_minvalue := TO_NUMBER(TRIM(MINVALUE)); EXCEPTION WHEN OTHERS THEN dbms_output.put_line('数据输入非法!'); END ; CREATE_PROC_STR:='CREATE OR REPLACE PROCEDURE PEDIS20ADMIN.'||PROC_NAME2||'('||PARAMETER_NAME||' IN VARCHAR2)'||' AS ' ||CHR(13)||'BEGIN'||CHR(13)||' IF '||PARAMETER_NAME||'>'||'TO_NUMBER('''||MINVALUE||''') OR '||PARAMETER_NAME||'>'||'TO_NUMBER('''||MAXVALUE||''') THEN '|| CHR(13)||' DBMS_OUTPUT.PUT_LINE(''字段'||PARAMETER_NAME||'的值不在'||MINVALUE||'和'||MAXVALUE||'之间!'');' ||CHR(13)||' END IF;'||CHR(13)||'END;';
EXECUTE IMMEDIATE CREATE_PROC_STR; ...... END CREATE_VALUE_CONSTRAINT ;
create or replace procedure CREATE_VALUE_CONSTRAINT
AS
v_maxvalue number;
v_minvalue number;
BEGIN
...... BEGIN
v_maxvalue := TO_NUMBER(TRIM(MAXVALUE));
v_minvalue := TO_NUMBER(TRIM(MINVALUE));
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('数据输入非法!');
END ;
CREATE_PROC_STR:='CREATE OR REPLACE PROCEDURE PEDIS20ADMIN.'||PROC_NAME2||'('||PARAMETER_NAME||' IN VARCHAR2)'||' AS '
||CHR(13)||'BEGIN'||CHR(13)||' IF '||PARAMETER_NAME||'>'||'TO_NUMBER('''||MINVALUE||''') OR '||PARAMETER_NAME||'>'||'TO_NUMBER('''||MAXVALUE||''') THEN '||
CHR(13)||' DBMS_OUTPUT.PUT_LINE(''字段'||PARAMETER_NAME||'的值不在'||MINVALUE||'和'||MAXVALUE||'之间!'');'
||CHR(13)||' END IF;'||CHR(13)||'END;';
EXECUTE IMMEDIATE CREATE_PROC_STR;
......
END CREATE_VALUE_CONSTRAINT ;
-------------------------------------------------------
没用,虽然v_maxvalue,v_minvalue是数字
但是在合并字符串的时候又把它们变成字符了
我以前就是这样做的