2011-11-07 43 views
1

我有查詢構建plsql代碼。我使用綁定變量和關聯數組來存儲它們的值。類似的東西:關聯數組和sysdate

declare 
    type myt table of varchar2(4000) index by varchar2(100); 
    vars myt; 
    v_cursor integer; 
    newQuery varchar2(1000) := 'select * from blabla where '; 
    bind_key varchar2(100); 
    rows_count integer; 
begin 
    -- query building 
    if 1=1 then 
     newQuery := newQuery || 'col1 = :bind_col1'; 
     vars(':bind_col1') := sysdate; -- problem!!! 
    end if; 
    .... 
    -- query execution 
    v_cursor := dbms_sql.open_cursor; 
    dbms_sql.parse(v_cursor, newQuery, dbms_sql.v7); 
    bind_key := vars.first; 
    loop 
     exit when bind_key is null; 
     dbms_sql.bind_variable(v_cursor, bind_key, vars(bind_key)); 
     bind_key := vars.next(bind_key); 
    end loop; 
    row_count := dbms_sql.execute(v_cursor); 
    dbms_sql.close_cursor(v_cursor); 
end; 

是否有其他泛型類型比varchar2,所以不會有轉換date->varchar2->date

回答

1

dbms_sql.bind_variable可以綁定many datatypes的變量。但是,您不能申報<any_data_type>

當你與VARCHAR2工作,你可以使用雙射顯式轉換,例如(這是邏輯上等同於Java中類似Object[]例如):

newQuery := newQuery || 'col1 = to_date(:bind_col1, ''yyyymmdd hh24:mi:ss'')'; 
vars(':bind_col1') := to_char(sysdate, 'yyyymmdd hh24:mi:ss');