暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 动态创建数据库链接

askTom 2017-10-20
406

问题描述

我有几个脚本在创建数据库链接时是硬连线的,并且都运行良好。不过,现在是时候将它们提升到一个新的水平并扩展用户社区了。为此,创建数据库链接语句需要在运行时动态确定主机连接字符串。读取连接字符串不是问题。

简单地说,下面的第一个语句 (硬编码) 工作正常。第2条声明没有第3条声明也没有。有什么想法吗?

使用 “主机名称。abc_xyz.com:1521/srvc_name.abc_xyx.com” 创建数据库链接TempLink;-工作正常

使用: Bind_Variable_1创建数据库链接TempLink;-失败,尝试使用和不使用引号的变量

立即执行: Bind_Variable_2; -- 失败,变量 = 1st语句

专家解答

这不是数据库链接问题,而是DDL问题。您不绑定到DDL,例如

SQL> exec execute immediate 'create table :x (c int)' using 'MY_TABLE';
BEGIN execute immediate 'create table :x (c int)' using 'MY_TABLE'; END;

*
ERROR at line 1:
ORA-00903: invalid table name
ORA-06512: at line 1


所以你仍然可以使用动态SQL... 只是不使用绑定。

SQL> variable x varchar2(100)
SQL> exec :x := 'MYTAB'

PL/SQL procedure successfully completed.

SQL> exec execute immediate 'create table '||:x||' (c int)';

PL/SQL procedure successfully completed.


显然和往常一样,使用动态SQL时要格外小心安全

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论