PL / SQL过程字符参数

时间:2012-03-31 16:19:12

标签: sql stored-procedures plsql oracle10g procedure

这可能是一个非常愚蠢的问题,但我已经尝试过搜索并回答空白。

我正在编写一个采用CHAR类型参数的过程。即:

  CREATE PROCEDURE Proc1 (Param1 CHAR(5))
  AS
  BEGIN
    ...
  END;

这不起作用并在CHAR(5)区域周围抛出错误。如果我没有为参数指定大小,那么只需将其保留为CHAR它就可以正常工作。我尝试过包含关键字IN,但这没什么区别。

是否有指定PL / SQL过程中参数的大小?

2 个答案:

答案 0 :(得分:9)

  

是否有指定PL / SQL过程中参数的大小?

不,如手册中所述

来自http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/subprograms.htm#sthref1640

对于每个参数,您指定:
- 它的名字。
- 其参数模式(...)
- 它的数据类型。 您只指定类型,而不是任何长度或精度约束

(强调我的)

答案 1 :(得分:0)

作为之前提到的a_horse_with_no_name,您不应在过程定义中指定参数长度。 但是,如果要控制变量长度,可以尝试这种方法:


procedure A(var CHAR) is
 MAX_CHAR number := 10; -- for an instance
begin
 if length(var) > MAX_CHAR then
   -- here you can throw an exception
 end if;

 ...

end A;