2016-08-04 487 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