这可能是一个非常愚蠢的问题,但我已经尝试过搜索并回答空白。
我正在编写一个采用CHAR类型参数的过程。即:
CREATE PROCEDURE Proc1 (Param1 CHAR(5))
AS
BEGIN
...
END;
这不起作用并在CHAR(5)区域周围抛出错误。如果我没有为参数指定大小,那么只需将其保留为CHAR它就可以正常工作。我尝试过包含关键字IN,但这没什么区别。
是否有指定PL / SQL过程中参数的大小?
答案 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;