假設你有這樣的過程:爲什麼oracle plsql varchar2變量需要一個大小但參數不是?
PROCEDURE f (param VARCHAR2)
IS
var VARCHAR2(10);
BEGIN
var := 'hi';
END f;
我想明白爲什麼var
需要指定的長度,但param
沒有。我很難在oracle文檔中找到關於這方面的信息。
假設你有這樣的過程:爲什麼oracle plsql varchar2變量需要一個大小但參數不是?
PROCEDURE f (param VARCHAR2)
IS
var VARCHAR2(10);
BEGIN
var := 'hi';
END f;
我想明白爲什麼var
需要指定的長度,但param
沒有。我很難在oracle文檔中找到關於這方面的信息。
「Oracle數據庫從調用該過程的環境中派生參數的長度,精度和範圍。」
請檢查這related question。
參考:Oracle® Database SQL Reference 10g Release 2 (10.2) 請看下面的語義/參數/數據類型。
不同的是,子程序標題具有與實際參數當子程序被調用替換形式參數:
create or replace function f(
p_x in varchar2 /* a formal parameter */
,p_y in varchar2 /* a formal parameter */
) return varchar2 /* a formal parameter */
is
begin
return p_x || p_y;
end;
declare
v_z varchar2(10);
v_x constant varchar2(1) := 'X';
begin
v_z := f(v_x, 'Y'); /* actual parameters */
end;
的形式參數(可以使用,但約束亞型)無約束和還包括有關參數模式和可能的默認值的信息,這些信息在聲明變量時不相關。
形式參數和實際參數的數據類型不一定相同,但是兼容。
還有很多其他的細節,但它們可以從PL/SQL Language Reference的章節PL/SQL Subprograms中讀取。詳見子程序參數。
我不知道爲什麼形式參數必須是無約束的,但我對此非常滿意,因爲它從子程序頭中刪除(不必要的)細節,使其更加抽象。
感謝您的鏈接! – grinch
不客氣! –