Oracle命令从另一个模式创建表,包括触发器?

时间:2018-01-11 20:06:09

标签: oracle

使用此命令,我可以从另一个架构创建一个表,但它不包含触发器。是否可以从另一个模式创建表,包括触发器?

(ns private.tmp.spec-test (:require [clojure.spec.alpha :as spec] [clojure.spec.test.alpha :as stest])) ;;; Macro (defmacro twice' [x] `(* 2.0 ~x)) (spec/fdef twice' :args (spec/cat :x double?) :ret double? :fn (fn [{{:keys [x]} :args, x2 :ret}] (or (and (Double/isNaN x) (Double/isNaN x2)) (= x2 (+ x x))))) (println (stest/summarize-results (stest/check `twice'))) ;; {:total 0} ;;; Function (defn twice [x] (* 2.0 x)) (spec/fdef twice :args (spec/cat :x double?) :ret double? :fn (fn [{{:keys [x]} :args, x2 :ret}] (or (and (Double/isNaN x) (Double/isNaN x2)) (= x2 (+ x x))))) (println (stest/summarize-results (stest/check `twice))) ;; {:total 1, :check-passed 1}

1 个答案:

答案 0 :(得分:1)

如果您有代码存储库,则第一个选项是为这些对象运行 CREATE脚本。我想你不会。

如果您使用任何 GUI 工具,事情会变得更简单,因为它们包含SCRIPT选项卡,使您可以从源复制代码并将其粘贴到目标用户。

如果您使用的是 SQLPlus ,则表示您实际应该知道您应该做的事情。这是一个简短的演示。

SQL> connect hr/hr@xe
Connected.
SQL> create table detail (id number);

Table created.

SQL> create or replace trigger trg_det
  2  before insert on detail
  3  for each row
  4  begin
  5    :new.id := 1000;
  6  end;
  7  /

Trigger created.

SQL>

SQL> -- you'll have to grant privileges on table to another user
SQL> grant all on detail to scott;

Grant succeeded.

以SCOTT身份连接,检查我们得到了什么:

SQL> connect scott/tiger@xe
Connected.
SQL> -- now, query ALL_SOURCE and you'll get trigger code
SQL> set pagesize 0
SQL> col text format a50
SQL> select text from all_source where name = 'TRG_DET' order by line;
trigger trg_det
before insert on detail
for each row
begin
  :new.id := 1000;
end;

6 rows selected.

SQL>

另一个选择是 export&导入表,它也会触发(我已经删除了与Oracle数据库版本无关的部分):

C:\>exp hr/hr@xe tables=detail file=detail.dmp
About to export specified tables via Conventional Path ...
. . exporting table                         DETAIL          0 rows exported
Export terminated successfully without warnings.

C:\>imp scott/tiger@xe file=detail.dmp full=y
. importing HR's objects into SCOTT
. importing HR's objects into SCOTT
. . importing table                       "DETAIL"          0 rows imported
Import terminated successfully without warnings.

C:\>

检查导入的内容(应该是表格和触发器):

SQL> desc detail
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------
 ID                                                 NUMBER

SQL> select * From detail;

no rows selected

SQL> insert into detail (id) values (-1);

1 row created.

SQL> select * From detail;

        ID
----------
      1000

SQL>

冷却;甚至触发器都有效。

可能还有其他一些选项,但这4个应该足以让你入门。