暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle insert语句的存储过程

ASKTOM 2019-01-22
623

问题描述

你好,问一下汤姆团队。

我有20个表使用身份列进行pk。现在,我正在使用returning子句来检索
在子表中用作fk的pk (使用Oracle 12c功能的标识列)。我被要求使用存储过程填充表 (插入语句)。我对此有一些问题:


1.函数会工作得更好吗?
2.使用存储过程在表中插入值是一个好习惯吗?有什么优势吗?表现?...
3.如果是这样,如何返回要在子表中用作fk的identity列的值?
4.我是否必须创建一个存储过程来填充每个表?

提前感谢。
问候,

专家解答

1.比什么好?

2.是的!SmartDB架构实际上建议这样做。这具有许多性能和安全性优势。

如果您想了解更多信息,Steven Feuerstein整理了有关此主题的所有关键文章:

http://stevenfeuersteinonplsql.blogspot.com/2018/05/the-smartdb-resource-center.html

3.在返回条款中?不知道这里有什么问题。

4.不。我会建议你创建一个事务API这将有一个过程来完成完成事务所需的所有DML。

例如,添加主细节数据 (如订单及其行) 可能看起来像:

create or replace procedure create_order ( 
  parameters ... 
) as
  order_id orders.order_id%type;
begin
  
  insert into orders ( order_id, ... ) 
  values ( default, ... )
  returning order_id into order_id;
  
  forall prod in 1 .. products.count
    insert into order_items ( order_id, product_id, ... )
    values ( order_id, products ( prod ), ... );
  
end create_order;
/
复制


现在,您可以将此过程放入order_api包中。并将插入物拆分为包内的单独 (私有) 过程,以使您的代码更易于管理。

但关键是要自上而下地考虑交易。这影响哪些表,以哪种方式?

不是自下而上,我们如何为每个表创建代码。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论