问题描述
我有几个脚本在创建数据库链接时是硬连线的,并且都运行良好。不过,现在是时候将它们提升到一个新的水平并扩展用户社区了。为此,创建数据库链接语句需要在运行时动态确定主机连接字符串。读取连接字符串不是问题。
简单地说,下面的第一个语句 (硬编码) 工作正常。第2条声明没有第3条声明也没有。有什么想法吗?
使用 “主机名称。abc_xyz.com:1521/srvc_name.abc_xyx.com” 创建数据库链接TempLink;-工作正常
使用: Bind_Variable_1创建数据库链接TempLink;-失败,尝试使用和不使用引号的变量
立即执行: Bind_Variable_2; -- 失败,变量 = 1st语句
简单地说,下面的第一个语句 (硬编码) 工作正常。第2条声明没有第3条声明也没有。有什么想法吗?
使用 “主机名称。abc_xyz.com:1521/srvc_name.abc_xyx.com” 创建数据库链接TempLink;-工作正常
使用: Bind_Variable_1创建数据库链接TempLink;-失败,尝试使用和不使用引号的变量
立即执行: Bind_Variable_2; -- 失败,变量 = 1st语句
专家解答
这不是数据库链接问题,而是DDL问题。您不绑定到DDL,例如
所以你仍然可以使用动态SQL... 只是不使用绑定。
显然和往常一样,使用动态SQL时要格外小心安全
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




