2

我正在使用 Rails 3.2.8 并且有

config.active_record.schema_format = :sql 

在我的 config/application.rb 中。

在 Oracle 11g 数据库中,我定义了一个表,其中包含依赖于用户定义函数的虚拟列:

CREATE TABLE BAR (
  ID NUMBER(19,0) NOT NULL,
  STATUS NUMBER(19, 0) DEFAULT 1,
  CALCULATED_STATUS NUMBER(19,0) GENERATED ALWAYS AS (MY_FUNCTION(STATUS)) VIRTUAL)

当 Rake 执行 db:test:clone_structure (Tasks: TOP => default => spec => db:test:clone_structure) 时,我正在打:

OCIError: ORA-00904: "FOO"."MY_FUNCTION": 无效标识符: CREATE TABLE "BAR" (...

我认为正在发生的事情是 db:structure:dump 在函数之前导出表,因此在 development_structure.sql 中,CREATE FUNCTION MY_FUNCTION 出现在 CREATE TABLE BAR 语句之后。

我必须进去monkeypatch db:structure:dump 是如何工作的吗?

谢谢。

4

1 回答 1

1

我最终在 github.com/rsim/oracle-enhanced 中找到了适用的源代码,并在我放入 config/initializers 的文件中覆盖了 structure_dump 和 structure_dump_db_stored_code 方法。

于 2012-12-20T21:01:38.457 回答