如何写这个匿名块?

时间:2019-04-16 16:03:06

标签: oracle plsql

我正在尝试使用匿名块进行两次更新,但是它对我不起作用。 我在做什么错了?

DECLARE  
   v_voucher NUMBER(10) := 4329;
BEGIN

   UPDATE PRODUCTION 
   SET 
     UND_PROD = 0,
     UND_DET = 0
   WHERE 
     VOUCHER = v_voucher;
 
   UPDATE DET_PRODUCTION 
   SET 
     UND_GOOD = 0,
     UND_BAD = 0
   WHERE 
     VOUCHER = v_voucher;
 
END;
  

ORA-06550:第9行,第1列:   PLS-00103:预期以下情况之一时遇到符号“”:

     

(起始情况为go mod if loop mod声明结束异常退出   null编译指示加   [标识符] [双引号分隔标识符]   [绑定变量]继续关闭当前删除删除锁   插入打开回滚保存点集sql执行commit forall   合并管道清除

1 个答案:

答案 0 :(得分:4)

这样的代码没有任何问题,但是您似乎有一个导致问题的隐藏字符。

如果我从编辑窗口中复制代码并转储第二行中有C2A0之前的行中的内容。

select dump ('  WHERE VOUCHER = v_voucher;
     
    UPDATE DET_PRODUCTION SET 
', 1016) from dual;

DUMP('WHEREVOUCHER=V_VOUCHER; UPDATEDET_PRODUCTIONSET',1016)                                                                                                                                                      
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Typ=96 Len=60 CharacterSet=AL32UTF8: 9,57,48,45,52,45,20,56,4f,55,43,48,45,52,20,3d,20,76,5f,76,6f,75,63,68,65,72,3b,a,9,c2,a0,a,9,55,50,44,41,54,45,20,44,45,54,5f,50,52,4f,44,55,43,54,49,4f,4e,20,53,45,54,20,a
                                                                                                                         ^^^^^

解决此问题的最简单方法可能是,在第一次更新后,直到第二次更新之前,从分号中选择所有文本,然后将其删除-用一两个新换行符替换。

或者从问题中复制渲染的代码块并运行该代码-将原始代码(只能通过编辑才能看到)作为Markdown处理后,流氓字符就不成问题了。

不确定这是哪里来的;也许您是在Word之类的外部程序中编写的,并添加了特殊字符,因为它有这样做的习惯...