Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle-将存储过程复制到远程数据库_Sql_Database_Oracle_Stored Procedures_Plsql - Fatal编程技术网

Sql Oracle-将存储过程复制到远程数据库

Sql Oracle-将存储过程复制到远程数据库,sql,database,oracle,stored-procedures,plsql,Sql,Database,Oracle,Stored Procedures,Plsql,作为pl/sql研究的一部分,我的任务要求我创建一个远程数据库连接,并将所有表从本地复制到该连接,然后还复制引用数据的其他对象,以及视图和触发器等 其思想是,在远程端,视图等应该引用本地数据库联机时的本地表,如果本地数据库联机,则应该引用存储在远程数据库上的表 因此,我创建了一个连接,以及一个在远程端创建表的脚本 我还创建了一个pl/sql块来创建远程端的所有视图和触发器,通过该块,对本地数据库运行一个简单的select查询来检查它是否在线,如果在线,则一系列execute immediate语

作为pl/sql研究的一部分,我的任务要求我创建一个远程数据库连接,并将所有表从本地复制到该连接,然后还复制引用数据的其他对象,以及视图和触发器等

其思想是,在远程端,视图等应该引用本地数据库联机时的本地表,如果本地数据库联机,则应该引用存储在远程数据库上的表

因此,我创建了一个连接,以及一个在远程端创建表的脚本

我还创建了一个pl/sql块来创建远程端的所有视图和触发器,通过该块,对本地数据库运行一个简单的select查询来检查它是否在线,如果在线,则一系列execute immediate语句将创建视图等,并参考表1_name@local,如果不在线,该块将跳转到异常部分,在该部分中,一系列类似的execute immediate语句将创建相同的视图,但引用远程表

好的,这就是我变得不确定的地方。 我有一个包含一些过程和函数的包,我不确定在远程端创建这些过程和函数的最佳方式是什么,以便它在从何处获取引用表方面以类似的方式运行

这仅仅是一种将整个包创建块封装在“立即执行”中的情况,就像我对视图所做的那样,还是我应该创建两个不同的包并将它们称为pack1和pack1_remote

还是我认为有更有效的方法来实现目标


干杯

这绝对不是现实世界中任何理性的人设计系统的方式。在最好的情况下,我在现实世界中提出的建议会让你笑逐颜开


我能想到的最不疯狂的方法是使用两种不同的模式。模式1将拥有这些表。模式2将拥有代码。在安装时,为模式2需要引用的每个对象创建同义词。如果安装代码时远程数据库可用,请创建引用远程数据库中对象的同义词。否则,请创建引用本地数据库中对象的同义词。通过在代码和表之间创建一个额外的间接层,您无需使用动态SQL即可创建一组对象。

让我们调用本地数据库a和远程数据库B。您希望在B中创建对象。您似乎在说,如果a在线且否则使用B中的对象。这准确吗?如果是这样的话,您是否试图在编译时做出这样的决定?还是在运行时?在编译时做出这样的决定是没有意义的,因为这是一个时间点,您可以确保a在那个时候启动。在运行时进行选择可能会很有用,但会排除视图的使用(除其他外)。如果您试图在运行时进行确定,则说明系统设计不正确。您希望在数据库之间构建复制,以便数据保持同步,并且代码始终可以引用本地对象。这是一个更稳定、更高效、更易维护的解决方案。我不确定Justin是否会告诉你真相。也许这样做的想法是,进行在线/离线测试的脚本应该在用户会话开始时运行..我没有太多的细节。尽管这可能不是最稳定的方法,但您对存储过程/包有什么想法吗?是否希望在编译时进行一次确定?还是在运行时?这两种方法将完全不同。我认为,当用户登录时重新安装所有应用程序对象是可能的,但在这么多不同的级别上,这将是疯狂的。如果您只是在学习PL/SQL,我觉得这些都不是对赋值的合理解释。我最好的猜测是在编译时。。