lxp641467655 2015-10-16 01:22 采纳率: 0%
浏览 3434

oracle存储过程,pls-00103错误,新手很急!

主要是遍历一个用户下所有包含某个值的所有表名和列名
新手目前没有分,还请体谅
报错误,3,5行
CREATE OR REPLACE procedure SYS.P_FIND(
col_name in varchar
USERNAMES in varchar
) authid current_user
IS
lv_tabname varchar2(50);
lv_colname varchar2(50);
li_count int;
str_sql varchar2(255);
cursor cur_find is
select table_name ,column_name from sys.dba_tab_columns t
where owner='WYHISZS2';
begin
open cur_find;
loop
fetch cur_find into lv_tabname,lv_colname;
exit when cur_find%notfound;
str_sql:='select count(*) into li_count from '||USERNAMES.lv_tabname||' where '||lv_colname||'='||col_name;
execute immediate str_sql;
if (li_count)>0 then
dbms_output.put_line(username.table_name||'--'||username.column_name);
insert into WYHISZS2.FIND values (lv_tabname,lv_colname);
end if;
end loop;
close cur_find;

commit;
--select * from WYHISZS2.FIND;
end;
/

  • 写回答

2条回答 默认 最新

  • WorldMobile 2015-10-16 02:08
    关注

    编译后错误提示为pls-00103:出现符号""在需要下列之一时:begin case declare
    create or replace trigger auth_secure
     before insert or update or delete --/对整表更新前触发
      on g002
    begin
     IF to_char(sysdate,'DY','nls_date_language=american')
    in ('THU') then
    Raise_application_error(-20001, 'ou dont have access to modify this table.');
     End if;
    End ;

    编译后错误提示为:
    5 pls-00103:出现符号""在需要下列之一时:begin case declare exit for goto if loop mod null pragma raise return select update while with ...
    8 pls-00103:出现符号""在需要下列之一时:begin case declare else elseif end exit for goto if loop mod null pragma raise return select update while with ...

    原因分析:

    肉眼看不到的,有可能是全角的空格
    create or replace trigger auth_secure
     before insert or update or delete --/对整表更新前触发
      on g002
    begin
    IF to_char(sysdate,'DY','nls_date_language=american') --前面可能是全角的空格
    in ('THU') then
    Raise_application_error(-20001, 'ou dont have access to modify this table.');
    End if; --前面可能是全角的空格
    End ;

    这行代码前IF to_char(sysdate,'DY','nls_date_language=american')
    有两个不可见的控制符(看似空格,其实编码为A1,十进制161),这是导致编译错误的原因
    同样语句End if; 前面也有两个。
    删除后应该编译OK
    不知在什么地方复制的

    解决办法:

    因为是从别处复制的代码,可能有非法字符,删除了重新写一遍就可以了!

    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号