2017-11-07 9 views
0

EXECUTE IMMEDIATEコマンドを使用してクエリを作成し、ネストされたクエリ内で計算した2つの値を合計する必要があります。私は、USING節や他の節を使用する必要があるかどうか、作成した変数をステートメントに入れる方法を知りたいと思います。問合せは次のとおりです。PL/SQLのEXECUTE IMMEDIATE文に外部変数を使用する方法はありますか?

編集:これは新しい問合せです。バインディング変数(Ora-01008:すべての変数がバインドされているわけではありません)には依然として問題があります。この問題で私を助けてくれますか?

 EXECUTE IMMEDIATE 'SELECT sum (n_record_trovati_p) FROM (
     SELECT count(*) as n_record_trovati_p FROM od_pv_trading_day_orders partition (' || partition_current_month || ') WHERE DATETIME = :1 AND orderid = :2 AND broker = :3 
      UNION 
     SELECT count(*) as n_record_trovati_p FROM od_pv_trading_day_orders partition (' || partition_previous_month || ') WHERE DATETIME = :1 AND orderid = :2 AND broker = :3 
    )' INTO n_record_trovati 
    USING d_datetime, n_orderid, cur.broker; 


    //old query 
    sys_current_date VARCHAR2 (7); 
    sys_previous_date VARCHAR2 (7); 
    partition_current_month VARCHAR2 (8); 
    partition_previous_month VARCHAR2 (8); 

    BEGIN 
    ... 

    SELECT TO_CHAR(ADD_MONTHS(d_datetime,0),'yyyymm') INTO sys_current_date FROM dual; 
    SELECT TO_CHAR(ADD_MONTHS(d_datetime,-1),'yyyymm') INTO sys_previous_date FROM dual; 

    partition_current_month := 'P'|| sys_current_date; 
    partition_previous_month := 'P'|| sys_previous_date; 

    EXECUTE IMMEDIATE 'SELECT SUM (found_records) INTO ' || n_record_trovati || ' FROM (
     SELECT COUNT(*) as found_records FROM example_table PARTITION (' || partition_current_month || ') WHERE DATETIME = ' || d_datetime || ' AND orderid = ' || n_orderid || ' AND broker = ' || cur.broker || ' 
      UNION 
     SELECT COUNT(*) as found_records FROM example_table PARTITION (' || partition_previous_month || ') WHERE DATETIME = ' || d_datetime || ' AND orderid = ' || n_orderid || ' AND broker = ' ||cur.broker || ' 
    )'; 

    ... 
    end 

実行可能な即値ストリングの残りの部分から変数名を||エラーがポップアップします。クエリに何が間違っているのか教えてください。どうすれば修正できますか?ありがとう

+0

エラーは何ですか? –

+0

コンパイルエラーがなくても「表現がありません」 – Anacarnil

答えて

1

文字列の中にINTOを使用しないでください。それがあります

EXECUTE IMMEDIATE 'SELECT SUM (found_records) FROM (
     SELECT COUNT(*) as found_records FROM example_table PARTITION (' || partition_current_month || ') WHERE DATETIME = ' || d_datetime || ' AND orderid = ' || n_orderid || ' AND broker = ' || cur.broker || ' 
      UNION 
     SELECT COUNT(*) as found_records FROM example_table PARTITION (' || partition_previous_month || ') WHERE DATETIME = ' || d_datetime || ' AND orderid = ' || n_orderid || ' AND broker = ' ||cur.broker || ' 
    )' INTO n_record_trovati;  
+0

「表現が見当たりません」というエラーはなくなりましたが、現在は角カッコに関するミニ問題があります。他の特定の方法で文字列を編集する必要はありますか?とにかく助けてくれてありがとう、それはクエリが動作し始めているようです! – Anacarnil