首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误: PLS-00103:遇到符号"/“

错误: PLS-00103:遇到符号"/“
EN

Stack Overflow用户
提问于 2017-12-25 07:25:14
回答 2查看 5.2K关注 0票数 0

我对Pl Sql很陌生。我试图运行过程并得到以下错误:

遇到符号"Create“和开始用case声明结束异常,退出goto循环mod null杂注,提高返回选择更新,而使用<<继续关闭当前删除获取锁插入打开回滚保存点设置sql为所有合并管道清除:

我已经尝试寻找导致这些错误的原因以及类似的例子,但是结果还不够。这是我的剧本:

代码语言:javascript
复制
 CREATE OR REPLACE PROCEDURE CommandScript IS
BEGIN 
  EXECUTE IMMEDIATE 'DROP TABLE sf_tmp'; 
  EXCEPTION
     WHEN OTHERS THEN IF SQLCODE != -942 
       THEN RAISE; 
       END IF; 

create table sf_tmp(smcard varchar2(17),p_line varchar2(1000));  

INSERT INTO dec_tmp(DECSCNR,DECSCPSNR)
     SELECT TRIM (SUBSTRB (qinputstring, INSTR (qinputstring, '|', 1, 2) + 1,11)) dec_nr,
        decoders.decscpsnr FROM bgqueue, decoders WHERE qworktype = 10
        AND decoders.decscpsnr > 0 AND decoders.decscnr =
        TRIM (SUBSTRB (qinputstring,INSTR (qinputstring, '|', 1, 2) + 1,11))
        AND LENGTH (TRIM (SUBSTRB (qinputstring,INSTR (qinputstring, '|', 1, 2) + 1,11))) = 11;

commit;


declare 
 CURSOR smcard_cursor  IS 
     (select d.DECSCNR,d.DECSCPSNR from dec_tmp d);                  


 CURSOR prod_cursor  (v_pslink number )  IS
     (select  p.psdecscpsnrlink, c.CPCSIENTITLEMENTS
        from csiprod c, prodsubs  p
         where p.psdecscpsnrlink = v_pslink
            and c.CPIBSPRODUCTNR = p.psproductnr
            and c.CPCONDITIONNR =1
            and c.cpcsientitlements<>'NILDRA'
            and p.psstatus = 'A' ) ;

   m_decno  varchar2(17) ;
   v_decno  varchar2(17) ;
   prod_line VARCHAR2(1000) ;
   prod_full VARCHAR2(1000) ;
   comma_line VARCHAR2(1000) ;

   prod_len  number ;
   prod_diff number ;
   new_prodct varchar2(300) ;

   L_Size NUMBER ;
   new_size number ;
   s_link number ;
   space_con number ;
   sw number ; 
BEGIN


FOR smcard_record IN smcard_cursor LOOP
   prod_line  := '' ;
   prod_full  := ''  ;
   comma_line := ''  ;
   prod_len   :=0 ;
   prod_diff  :=0  ;
   L_Size :=0 ;
   new_size := 0 ;

   space_con := 0;  
   new_prodct := '' ;


   sw := 0 ; 
   S_link := smcard_record.decscpsnr ;
   v_decno:= substr(smcard_record.decscnr,1,10) ;
   m_decno:= substr(smcard_record.decscnr,1,11) ;


 FOR prod_record IN prod_cursor (s_link) LOOP
    SW := 1 ;
    prod_len := length(prod_record.CPCSIENTITLEMENTS) ;
    prod_diff := mod(prod_len,6) ;

  if prod_diff = 0   THEN 
       new_prodct := prod_record.CPCSIENTITLEMENTS ; 
     else 
      space_con :=prod_len+6-prod_diff ;
      new_prodct := rpad(prod_record.CPCSIENTITLEMENTS, space_con,' ') ;
  end if ;       

  prod_line := prod_line || new_prodct ;
  end loop ;



if sw = 1 then 
 L_size := length(prod_line) ;
 comma_line := comma_line || substr(prod_line,1,6);

for I in 1..L_size  LOOP 
    IF MOD(I,6) = 0 THEN                             
       comma_line := comma_line ||',' || substr(prod_line,(I+1),6) ; 
    END IF;
end loop ;  

 new_size := length(comma_line) - 1 ;
 comma_line := substr(comma_line,1,new_size) ;



prod_FULL :='SOFULL'||','||'002000,'|| v_decno||',EGY,'||'EG,'||'NONE      ,'||comma_line ;

 insert into sf_tmp  (smcard,p_line) values (m_decno,prod_full) ;
 commit ;

end if ; 

end loop ;  
 END;
END; 
EN

回答 2

Stack Overflow用户

发布于 2017-12-25 07:31:27

我想你不需要在第10行“/”。

票数 1
EN

Stack Overflow用户

发布于 2017-12-25 09:22:11

不能在本机过程中执行DDL。将其包装在执行立即中

代码语言:javascript
复制
create table sf_tmp(smcard varchar2(17),p_line varchar2(1000));  

您不结束begin语句,这意味着您的过程看到

代码语言:javascript
复制
create procedure begin ... declare ... begin ... end ... end

您不需要编译代码中的declare,所以应该是:

代码语言:javascript
复制
create procedure ... begin ... end ... begin ... end

第二个begin ... end是您希望在编译时执行的(即创建和删除表)

不能在过程中引用不存在的表。考虑到您允许表在开始时不存在,您需要将其包装在立即执行中。

代码语言:javascript
复制
insert into sf_tmp  (smcard,p_line) values (m_decno,prod_full) ;

请开始使用ANSI连接语法,而不是加入WHERE子句

Oracle建议您使用FROM子句外部连接语法,而不是Oracle JOIN操作符。使用Oracle join运算符(+)的外部联接查询受以下规则和限制的限制,这些规则和限制不适用于FROM子句外部联接语法:

LISTAGG()应该对你有很大的帮助。

全局临时表应该消除在您的过程中执行DDL的需要。

如果不进行过多的调查,整个过程看起来就可以在一个INSERT语句中完成.

最后,看起来您正在生成要稍后执行的部分SQL。在非常具体的情况下,这可能是一种有效的方法,但在继续之前,我会认真地重新考虑是否如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47966590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档