Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एसक्यूएल क्वेरी निष्पादित करने में सक्षम नहीं

यह केवल डायनेमिक sql के साथ ही संभव है, क्योंकि क्लॉज द्वारा ग्रुप में कॉलम की संख्या परिवर्तनशील है। उदाहरण के लिए एक फंक्शन के साथ:

    create or replace
    function sum_cash_transactions ( p_threshold_type varchar2) return number
    is
      v_result NUMBER;
    begin
      execute immediate ' select max( sum_amount) 
                          from( select sum(amount) as sum_amount
                                from   cash_transactions
                                group by ' || p_threshold_type || ' )'
     into v_result;
     return v_result;
     end;
/

और फिर

select threshold_id
 from thresholds
 where threshold_amount < sum_cash_transactions(threshold_type);

नई आवश्यकताओं के कारण संपादित करें:

CREATE OR REPLACE package pkg AS
  TYPE res_rec_type IS RECORD (
    threshold_id  VARCHAR2(200)
  , Tran_inst_id  NUMBER(10,0)
  , sum_amount    NUMBER(22)
  );
  TYPE res_tab_type IS TABLE of res_rec_type;
  FUNCTION f1 RETURN  res_tab_type PIPELINED;
END;
/

CREATE OR REPLACE PACKAGE BODY pkg AS

  FUNCTION f1 RETURN  res_tab_type PIPELINED
  IS
    CUR    SYS_REFCURSOR;
    v_rec  res_rec_type;
  BEGIN
    FOR treshold in ( SELECT Threshold_id,  Threshold_type,   Threshold_amount FROM thresholds)
    LOOP
      OPEN CUR FOR 'SELECT ' || threshold.Threshold_id || ', tTran_inst_id,  s FROM (SELECT  tTran_inst_id, SUM(AMOUNT) OVER (PARTITION BY ' || p_Threshold_type || ') as s from cash_transactions ) WHERE s > ' || treshold.Threshold_amount ;
      LOOP
        FETCH cur INTO v_rec;
        EXIT WHEN cur%NOTFOUND;
        pipe row(v_rec);
      END LOOP;
    END LOOP;
    CLOSE cur;
    RETURN;
  END;
END;
/

SELECT * form table(pkg.f1);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल | डुप्लिकेट रिकॉर्ड हटाएं

  2. ORA-12154 निर्दिष्ट कनेक्ट पहचानकर्ता को हल नहीं कर सका

  3. डेटाबेस पैचसेट प्राप्त करें

  4. JDBC प्रकार स्क्रॉल असंवेदनशील और संवेदनशील

  5. ओरेकल को ओआरए-12704 फेंकने के लिए ईएफ क्वेरी:चरित्र सेट मेल नहीं खाता