[英]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.