相关疑难解决方法(0)

了解Table和Transaction API之间的差异

朋友们,

我通过另一个SO问题找到的Ask Tom 线程提到了Table和Transactional API,我试图理解它们之间的区别.

表API(TAPI)是无法访问基础表的地方,并且有"getters"和"setter"来获取信息.

例如,要选择一个地址,我会:

   the_address := get_address(address_id);
Run Code Online (Sandbox Code Playgroud)

代替:

   select the_address
   from some_table
   where identifier = address_id
Run Code Online (Sandbox Code Playgroud)

然后要更改地址,我将调用另一个负责更改的TAPI:

   ...
   change_address(address_id, new_address);
   ...
Run Code Online (Sandbox Code Playgroud)

事务API(XAPI)再次没有直接访问权限来修改表中的信息,但我可以从中进行选择?(这是我的理解有点朦胧的地方)

要选择一个地址我会:

   select the_address
   from some_table
   where identifier = address_id
Run Code Online (Sandbox Code Playgroud)

然后改变它我会打电话

   ...
   change_address(address_id, new_address);
   ...
Run Code Online (Sandbox Code Playgroud)

因此,我可以在TAPI和XAPI之间看到的唯一区别是从数据库中检索记录的方法,即Select与PL/SQL调用?

是吗?还是我完全错过了这一点?

oracle api plsql design-patterns

11
推荐指数
2
解决办法
4747
查看次数

如何在视图上写删除规则?

我正在尝试在视图上编写规则以从组件表中删除元组,但到目前为止只能从其中一个中删除数据.我已经使用了一段时间基本视图的postgres,但我对视图规则没有任何经验.

我写了一个愚蠢的小测试用例来弄清楚/显示我的问题.在这个例子中,每个子元组只有一个父元组(我的实际模式当然不是这样的).

组件表:

CREATE TABLE parent(
   id serial PRIMARY KEY,
   p_data integer NOT NULL UNIQUE
);
CREATE TABLE child(
   id serial PRIMARY KEY,
   parent_id integer NOT NULL UNIQUE REFERENCES parent(id),
   c_data integer NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

视图:

CREATE TABLE child_view(
   id integer,
   p_data integer,
   c_data integer
);
CREATE RULE "_RETURN" AS ON SELECT TO child_view DO INSTEAD
   SELECT child.id, p_data, c_data 
      FROM parent JOIN child ON (parent_id=parent.id);
Run Code Online (Sandbox Code Playgroud)

问题删除规则

CREATE RULE child_delete AS ON DELETE TO child_view DO INSTEAD(
   DELETE FROM child …
Run Code Online (Sandbox Code Playgroud)

postgresql

5
推荐指数
1
解决办法
4919
查看次数

标签 统计

api ×1

design-patterns ×1

oracle ×1

plsql ×1

postgresql ×1