在PL / SQL中设置BindByName

时间:2017-08-09 08:05:51

标签: sql oracle plsql

我遇到绑定变量的问题(使用默认设置BindByPosition是specyfic)。例如,我有如下程序:

DECLARE
    v_sql varchar2;
BEGIN
    v_sql := 'select :1 as field1, :1 as field2 from dual';
    EXECUTE IMMEDIATE v_sql USING 'test', 'test';
END;

现在我需要输入' test'两次。如何将BindByName更改为true,以具有以下过程:

DECLARE
    v_sql varchar2;
BEGIN
    v_sql := 'select :1 as field1, :1 as field2 from dual';
    EXECUTE IMMEDIATE v_sql USING 'test';
END;

2 个答案:

答案 0 :(得分:1)

您不能在动态sql中使用重复占位符,只能在pl / sql中使用。

documentation

中的更多内容

答案 1 :(得分:1)

您的示例不需要动态SQL:

DECLARE
  val    VARCHAR2(20) := 'Test';
  field1 VARCHAR2(20);
  field2 VARCHAR2(20);
BEGIN
  SELECT val, val
  INTO   field1, field2
  FROM   DUAL;
END;
/

或者,没有SQL:

DECLARE
  val    VARCHAR2(20) := 'Test';
  field1 VARCHAR2(20);
  field2 VARCHAR2(20);
BEGIN
  field1 := val;
  field2 := val;
END;
/