--存储过程
create or replace procedure prc_cl_szyl_shbx_02(p_date in varchar2,
p_nreturn out number)
AUTHID CURRENT_USER IS
v_task_pos varchar2(256);
v_sqlerrm varchar2(256);
v_sqlerrcode varchar2(256);
v_sp_name varchar2(50);
v_sql varchar2(32767);
v_tablename varchar2(50);
v_flag number;
v_no number;
v_gzm varchar2(10);
begin
v_task_pos := '程序运行开始';
v_sp_name := 'prc_cl_01_check_date';
--sp_record_log(v_serial_no,v_sp_name,sysdate,v_task_pos,'');
-- 设置初始成功标志
p_nreturn := 200;
v_no := 1;
v_tablename := 'SHFFJL_P1';
v_gzm :='P1';
v_sql := 'create table ' || v_tablename ||
'as select s.jsq,s.dwm,s.bmdm,s.tbr,s.xm,s.shbzh,min(jsq)as jsq,t.dwm,t.tyymd,t.txymd
from shffjl s left join txda t
on s.tbr = t.tbr
group by s.jsq,s.dwm,s.bmdm,s.tbr,s.xm,s.shbzh,jsq,t.dwm,t.tyymd,t.txymd
having s.dwm =t.dwm and s.tbr =s.tbr and s.jsq < nvl(t.tyymd,t.txymd)';
v_no := v_no + 1;
delete from qx_log_ywlj_wt;
select count()
into v_flag
from user_tables
where table_name = v_tablename;
/if v_flag = 0 then
execute immediate v_sql;
else
execute immediate 'drop table ' || v_tablename || '';
execute immediate v_sql;
end if;*/
execute immediate v_sql;
insert into qx_log_ywlj_wt
(yno, ytablename, gzm)
values
(v_no, v_tablename, v_gzm);
commit;
v_task_pos := '程序运行成功';
exception
when others then
rollback;
v_task_pos := '程序运行失败';
v_sqlerrm := substr(sqlerrm, 0, 800);
dbms_output.put_line(v_sqlerrm);
v_sqlerrcode := sqlcode;
-- sp_record_log(v_serial_no,v_sp_name,sysdate,v_task_pos,v_sqlerrm||v_sqlerrcode);
p_nreturn := v_no;
END prc_cl_szyl_shbx_02;
--测试页面
-- Created on 2020/1/2 by ADMINISTRATOR
declare
-- Local variables here
i integer;
pdate integer;
pnreturn integer;
begin
-- Test statements here
pdate :=0;
prc_cl_szyl_shbx_02(p_date => pdate,p_nreturn => pnreturn);
end;
--报警信息
ORA-00922: 选项缺失或无效
赞@12不懂3 的答案。我再告诉你一个简单的方法,适用用代码比较少的时候,你可以先删除一部分代码,然后看还有警告吗,如果有,继续删除一部分代码,如果没有,看另一部分代码,用此二分法,很容易定位问题。
我找到问题了,谢谢会长
第一:别着急这是一个简单的小问题 让我来教你如何解决这个问题
首先:我们先在oracle 见一个临时的log表
然后:在你的存储过程了 insert 日志信息到Log表里面
最后:定位到具体sql语句,基本上这个问题已经排查到了 那么也就很好解决了
一定要自己学会动手哦,而不是直接拿到答案
我找到问题了,谢谢
你这种方法是不是适合这种问题,我不知道我的存储过程那个地方出了问题,然后每隔一句sql向Log表中添加一次,看哪一步没有添加就是那个地方出的问题。我是把sql语句打印了出来,发现的问题
表名和sql相互拼接,中间没有加空格