如何在集合类型中返回动态查询值 - plsql

时间:2017-09-08 06:27:19

标签: plsql plsqldeveloper

我的代码是:

create or replace type search_filter_type is object
    ( search_code varchar2(100),
      search_key varchar2(100),
      search_string varchar2(100),
      search_number number,
      search_date date,
      search_type varchar2(100) ,
      SEARCH_FIELD varchar2(100) ,
      search_condition varchar2(4000),
      search_query varchar2(4000),
      CONSTRUCTOR FUNCTION        search_filter_type return self as result
    );

集合

 CREATE OR REPLACE TYPE SEARCH_FILTER_COLC IS TABLE OF   SEARCH_FILTER_TYPE;

如何运行以下程序并获取动态查询数据/

CREATE OR REPLACE PROCEDURE BPC_SEARCH_CUSTOMER(P_FILTER in out nocopy SEARCH_FILTER_COLC)
IS
    LV_SEARCH_STRING VARCHAR2(200);
    LV_SEARCH_qry VARCHAR2(2000);
BEGIN
    IF P_FILTER IS NOT NULL THEN

        LV_SEARCH_qry := 'SELECT N_CUST_REF_NO, B.V_SEX AS Gender, A.V_TITLE_CODE, B.V_TITLE_DESC ||'''.'''||v_name AS Given_name, v_first_name AS first_name, 
                          V_MIDDLE_NAME AS MIDDLE_name ,V_last_NAME AS last_name, D_BIRTH_DATE AS "Date of Birth" FROM       
                          GNMT_CUSTOMER_MASTER A, GNLU_TITLE_MASTER B WHERE A.V_TITLE_CODE=B.V_TITLE_CODE';

        FOR I IN 1..P_FILTER.COUNT
        LOOP
            IF P_FILTER(I).SEARCH_CODE='IDENTIFICATION' THEN
                LV_SEARCH_STRING:= CASE P_FILTER(I).SEARCH_TYPE 
                                       WHEN 'STARTS WITH' THEN  'LIKE ''%' || P_FILTER(I).SEARCH_STRING || ''''
                                       WHEN 'CONTAINS' THEN  'IN '|| P_FILTER(I).SEARCH_STRING || ''''
                                       WHEN 'ENDS WITH' THEN  'LIKE '|| P_FILTER(I).SEARCH_STRING || '%'''
                                       WHEN 'EQUAL' THEN  '= '|| P_FILTER(I).SEARCH_STRING || ''''
                                   END;
                P_FILTER(I).search_condition := ' AND  N_CUST_REF_NO IN (SELECT N_CUST_REF_NO FROM GNDT_CUSTOMER_IDENTIFICATION WHERE V_IDEN_CODE='''|| P_FILTER(I).SEARCH_FIELD || ''' AND V_IDEN_NO '|| LV_SEARCH_STRING || ')';
            END IF;

            P_FILTER(I).search_condition :=  P_FILTER(I).search_condition || P_FILTER(I).search_condition :=; 
            LV_SEARCH_qry := LV_SEARCH_qry  || P_FILTER(I).search_condition;
        END LOOP;

        P_FILTER(I).search_query := LV_SEARCH_qry ;
    END IF;
END;

我需要执行过程查询以及如何调用或运行它?

细节: 将动态值传递给此过程。

0 个答案:

没有答案