【问题标题】:Teradata Dynamic SQL with Bind Variables?带有绑定变量的 Teradata 动态 SQL?
【发布时间】:2018-10-18 16:31:08
【问题描述】:

是否可以在 Teradata 动态 SQL 语句中使用绑定变量?我在任何地方都找不到示例。我想做这样的事情:

DECLARE SQLString VARCHAR(1000)
SET SQLString = 'SELECT * FROM MyTable WHERE ColumnA = :variable1';

EXECUTE IMMEDIATE SQLString; --Can I pass something here for variable1 or do I have to concatenate and not use a bind variable?

谢谢

【问题讨论】:

  • 简单的DECLARE variable1 VARCHAR(1000); SELECT * FROM MyTable WHERE ColumnA = variable1;怎么样
  • 在这个简单的例子中,不使用 EXECUTE IMMEDIATE 是有意义的,但是我有一个复杂的动态 SQL 语句,我不能只转换为普通的 SQL 语句。
  • 请发布示例(您想在 EXECUTE IMMEDIATE 中执行 DDL)吗?
  • 表名是动态的,这就是为什么它需要动态SQL:'SELECT * FROM' ||表名变量 || ' WHERE ColumnA = :variable1'
  • 如我所想。不可能将 TableNameVariable 作为参数/变量传递。您可以使用连接方法,但您必须确保输入是安全的以避免 SQL 注入攻击

标签: sql teradata teradata-sql-assistant


【解决方案1】:

带有绑定变量的DML语句通常会执行多次,因此使用EXECUTE IMMEDIATE时没有绑定变量,必须使用EXECUTE/PREPARE

DECLARE SQLstring VARCHAR(1000);
SET SQLstring = 'update MyTable SET ColumnA = ? where columnB = ?'; -- ? identify bind variables
PREPARE S1 FROM SQLstring;
EXECUTE S1 USING variable1, variable2;

Stored Procedure manual

【讨论】:

  • 链接失效
猜你喜欢
  • 2015-01-18
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2011-03-11
  • 2018-02-26
相关资源
最近更新 更多