2016-08-04 488 views
0

我想創建一個程序在一個表中插入值。我的表具有某些字段的默認值。我需要在我的過程中使用相同的默認值,而無需在我的過程中手動輸入它。例如PLSQL過程中的默認參數使用表默認值,而將

create table products 
(
    prod_id number primary key, 
    stock number default 0 
); 

我的過程聲明:

create procedure insert_product 
(
    prod_id number, 
    stock number default products.stock.default 
); 

,但我得到:

錯誤(58,99):PLS-00103:出現符號 「DEFAULT」 當 期待一個操作:當前存在刪除之前的符號DEFAULT‘「在之前插入’繼續

我想:

stock number default); 

stock number default products.stock); 

但是他們給的錯誤了。該表的默認值是否可以通過該過程訪問,而無需在過程中明確輸入它?我知道

stock number default 0);工作正常。

我是新來PLSQL所以請原諒我,如果這是一個愚蠢的問題。

+0

首先,爲了使變量與表格的列具有相同的數據類型,可以聲明如下:'var_name table.column_name%type'。其次,PL/SQL變量不能繼承表的列的默認值。爲了在插入時爲列指定一個默認值,可以省略它或在'insert into'語句的'values()'子句中使用'default'關鍵字。 –

+0

@NicholasKrasnov謝謝。我正在使用最佳做法,如stock products.stock%type,命名我的約束並在需要時向列名添加註釋。爲了消除混亂,我在這裏省略了它們。所以默認值不能被繼承。好。 – uutsav

回答

0

你行你你的主要程序內的私人程序和實現這一目標。請檢查以下內容:請參閱代碼僅僅是一個示例,未經測試。

create or replace procedure abc 
as 
v_num number; 
--Private Proc to Main procedure abc 
Procedure insert_product (prod_id number, 
          stock number) 
Is 
begin 
    <you logic>; 

end; 

Begin 

    select stock 
    into v_num 
    from products 
    where <condition>; 

    insert_product(PROD_ID,v_num); 

End ; 
+0

據我所知,我應該檢查是否爲外部程序中的庫存提供了價值。如果不是,則獲取表默認值並將其存儲在v_num中。然後調用嵌套過程來實際插入表中。我有兩個問題:1)再次,如何獲得表的默認字段值2)這是一個這麼簡單的任務過於複雜的方式。我們能以更簡單的方式做到嗎? – uutsav

+0

沒有必要檢查,因爲這將失去指定某個默認值的目的。一旦創建了具有默認列值的表格,如果沒有任何內容插入到該列中,則會自動填充默認值。在上面的例子中,只需在我的主要proc中選擇股票的價值,無論什麼時候插入,它都將成爲默認值,然後將其傳遞給我的過程。 – XING