我想在Oracle中编写存储过程。我没有很多的经验,我遇到了一个问题。该过程的最终目标是从一个数据库获取数据并以不同的形式将数据放入另一个数据库。我似乎有大部分的程序工作,但我遇到的问题似乎应该很简单。在代码的开头,我想检查一下确保创建了一个数据库链接。如果没有,那么我想创建数据库链接。创建一个数据库链接,如果没有在存储过程中创建
这就是我把我的程序里面:
IF (select count(1) from ALL_DB_LINKS where db_link = 'DB_LINK.NAME.COM') = 0 THEN
CREATE DATABASE LINK LINK_NAME
CONNECT TO username IDENTIFIED BY password
USING 'SID';
END IF;
我知道链接的作品,因为我已经做到了这外,做一个查找它。我收到的时候我尝试编译错误是这样的:
出现符号“CREATE”在需要下列之一时:
我已经做了所有的谷歌上搜索,我想我可以做的,我无法弄清楚我做错了什么。为了解决我有的其他问题,我也尝试了这样做:
DECLARE test_count number;
select count(1) into test_count from ALL_DB_LINKS where db_link = 'DB_LINK.NAME.COM';
BEGIN
IF test_count = 0 THEN
CREATE DATABASE LINK LINK_NAME
CONNECT TO username IDENTIFIED BY password
USING 'SID';
END IF;
END;
但是我得到了同样的错误。我也不确定是否能够在开始阶段开始工作。任何帮助将是一个伟大的...好吧,帮助。
您不能直接在Oracle中的过程中执行DDL。你可以通过使用'EXECUTE IMMEDIATE'来解决这个问题。 – 2013-04-26 20:25:57
我想你还必须使用动态SQL来查询链接;我现在无法测试,但是我非常肯定,如果您从静态SQL中不存在的链接中进行选择,那么该过程将无法编译,并且如果随后被删除,将会失效。在运行时创建对象听起来像是你可能想要重新思考的东西...... – 2013-04-26 21:31:11