我试图理解为了将存储过程从一个模式移动到另一个模式,需要执行哪些步骤。这个模式现在是多余的,我被要求移动所有的表和过程。我对表格没有问题,但从来没有做过任何程序,因此我想确保我不会错过任何东西。
我目前所做的是浏览整个过程,并列出它实际上在做什么,即删除/创建数据并将数据插入表中。
在此之后,我不确定这是否只是复制过程代码,然后在新模式上用相同的代码创建一个新过程,然后编译它。
如果有人能告诉我,在我所采取的步骤中是否遗漏了什么,我会非常感激,以确保我不会把事情搞砸。
我试图理解为了将存储过程从一个模式移动到另一个模式,需要执行哪些步骤。这个模式现在是多余的,我被要求移动所有的表和过程。我对表格没有问题,但从来没有做过任何程序,因此我想确保我不会错过任何东西。
我目前所做的是浏览整个过程,并列出它实际上在做什么,即删除/创建数据并将数据插入表中。
在此之后,我不确定这是否只是复制过程代码,然后在新模式上用相同的代码创建一个新过程,然后编译它。
如果有人能告诉我,在我所采取的步骤中是否遗漏了什么,我会非常感激,以确保我不会把事情搞砸。
2条答案
按热度按时间f3temu5u1#
无法将对象从一个模式“移动”到另一个模式。
我在这里看到的唯一可行的方法是复制源代码,然后在新模式中执行它。正如@pmdba作为注解编写的那样,您应该注意诸如“myschema”、“tablename”和其他引用之类的模式名称。
如果要复制的内容太多,可以考虑编写一个块,自动读取旧模式的数据并在新模式中自动创建它。您可以通过以下步骤获得(几乎)所有数据:
像这样使用:
请注意,这段代码只是作为一个提示,并不需要采取确切的方式。此外,由于不存在的对象、错误的模式引用等原因,仍然可能会出现错误。。
要获得表的ddl,可以使用
select dbms_metadata.get_ddl('TABLE','Table_name','Schema_Name') from dual;
. 通过google dbms\u metadata.get\u ddl,您可能会获得有关dbms\u metadata-package以及如何正确使用它的更多信息。ny6fqffe2#
如前所述,没有将一个对象(过程、函数或包等)复制到另一个模式的机制。另一种方法是使用all\ u源,但我更喜欢dbms\ u元数据,因为它允许您传输所有依赖项,例如特权。想象一下,我需要复制一个过程,但我需要保留特权,有了这个包,我可以得到一切。
例子
现在,假设我们想将过程及其权限复制到另一个模式
但是,想象一下你不需要引用,也不需要可编辑的论点
然后,为了获得具有新模式所有者的最终命令,我们使用regexp\u replace替换第一个出现的命令
最后,我们可以通过
在启动某些设置以增强dbms\U元数据输出之前,请记住在会话级别应用: