2017-08-09 6 views
0

バインド変数に問題があります(デフォルト設定のBindByPositionで指定されています)。たとえば、次のような手順があります:PL/SQLでBindByNameを設定する

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'を2回入力する必要があります。どのように私はこのような手順を持って、trueにBindByNameのを変更することができます。

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

あなたに2つのプレースホルダを配置しようとすると動的クエリは、それは確かに2つのバインド変数が必要になります。それを1に変更することはできません。 – XING

答えて

1

あなただけのPL/SQLで、動的SQLで繰り返しプレースホルダを使用することはできません。

もっとdocumentation

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; 
/