0
嘿,我想寫一個過程,其中用戶可以insert
他想獲得哪些列作爲parameter input
。截至目前,當我運行一個測試script
我得到這個錯誤:動態SQL接受表列作爲過程中的輸入
error -1 message error in ct_cu_act_medrecon_pg.spm_search_patientmedrecs =>ORA-00933: SQL command not properly ended
錯誤是指的在order by
部分在select statement
,當我刪除,我得到一個錯誤說:
error -1 message error in ct_cu_act_medrecon_pg.spm_search_patientmedrecs =>ORA-00904: "D"."P_INSERTDT_IN": invalid identifier
這裏是規格:
procedure spm_search_patientmedrecs (
p_columnsort_in in varchar2, --which is sort column
p_medmed_in in varchar2, --first column
p_planid_in in varchar2, --second column
p_detmed_in in varchar2, --third column
p_insertdt_in in varchar2, --fourth column
p_ascdesc_in in varchar2, --asc or desc in order by
p_return_cur_out out sys_refcursor,
p_err_code_out out number,
p_err_mesg_out out varchar2
);
下面是該過程的身體:
procedure spm_search_patientmedrecs (
p_columnsort_in in varchar2,
p_medmed_in in varchar2,
p_planid_in in varchar2,
p_detmed_in in varchar2,
p_insertdt_in in varchar2,
p_ascdesc_in in varchar2,
p_return_cur_out out sys_refcursor,
p_err_code_out out number,
p_err_mesg_out out varchar2)
is
lv_sql varchar2(32767);
begin
lv_sql := '';
lv_sql := 'select h.p_medmed_in,
h.p_planid_in,
d.p_detmed_in,
d.p_insertdt_in
from membermedicalreconcilationhdr h,
membermedicalreconcilationdet d
where h.membermedreconciliationhdrskey =
d.membermedreconciliationhdrskey
order by h.p_columnsort_in p_ascdesc_in';
p_err_code_out := 0;
OPEN p_return_cur_out FOR lv_sql;
exception
when others then
p_err_code_out := -1;
p_err_mesg_out := 'error in ct_cu_act_medrecon_pg.spm_search_patientmedrecs =>'||sqlerrm;
end spm_search_patientmedrecs;
這裏是我的測試腳本:
set serveroutput on
declare
type tempcursor is ref cursor;
v_cur_result tempcursor;
errcode number;
errmesg varchar2(1000);
begin
ct_cu_act_medrecon_pg.spm_search_patientmedrecs
('primarymemberplanid',
'membermedreconciliationhdrskey',
'primarymemberplanid',
'membermedreconciliationdetskey',
'inserteddt',
'ASC',
v_cur_result,
errcode,
errmesg
);
-- dbms_output.put_line(v_cur_result);
dbms_output.put_line('error '||errcode||' message '||errmesg);
end;
首先,我知道我是如何HANDELING錯誤的心不是最好的方式做到這一點,但多數民衆贊成在問我的人如何做到這一點希望它。
現在我不知道這是否是Oracle PL/SQL
中可能做的事情,但如果是這樣的話,我會非常感謝幫助我指出了正確的方向。如果你們需要任何更多的信息,請隨時詢問,我會盡我所能提供幫助(我只能使用SQL和PL/SQL兩個月)。提前致謝。
AHHHH有趣,讓我看看這個,看看它是如何去。感謝您的及時響應,併爲我清理動態sql。 –
看起來像它的工作,非常感謝你的幫助。 –
@Alex - 我確實說過「類似這樣的東西」:)感謝您收拾我! – APC