簡體   English   中英

游標加載了動態SQL

[英]Cursor loaded with dynamic SQL

我在過程中使用動態SQL加載的游標有問題。 我的查詢包含日期,並且出現此錯誤:

ORA-00932:數據類型不一致; 預產期 ; 得到:NUMBER

這是我的程序:

create or replace procedure EMP_CURSOR (
    p_date in date,
    p_schema in varchar2
) is

    c_emp sys_refcursor;

begin

    open c_emp for
        'select ID, NAME
        from ' || DBMS_ASSERT.schema_name(p_schema) || '.EMP
        where DATE_MAJ >= ' || p_date;

    EMP (c_emp);

    exception
        when others then
            DBMS_OUTPUT.put_line(SQLERRM);

end;

這就是我所說的:

exec EMP_CURSOR(to_date('01/01/2015','dd/MM/yyyy'),'TEST');

我不知道如何傳遞動態查詢的日期。 當我刪除動態部分並將模式名稱放入查詢中時,它可以正常工作。

Oracle根據您的NLS_DATE_FORMAT隱式將p_date轉換為字符串,因為您將其鏈接為字符串。 您需要根據文檔使用綁定變量

open c_emp for
 'select ID, NAME
    from ' || DBMS_ASSERT.schema_name(p_schema) || '.EMP
    where DATE_MAJ >= :1' using p_date;

這也為您提供了更多防止SQL注入的保護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM