oracle – 两个带有begin和end的PLSQL语句,单独运行但不能一起运行?

前端之家收集整理的这篇文章主要介绍了oracle – 两个带有begin和end的PLSQL语句,单独运行但不能一起运行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
只是想知道是否有人可以帮助这个,我有两个PLsql语句来改变表(添加额外的字段),它们如下:
  1. -- Make GC_NAB field for Next Action By Dropdown
  2.  
  3. begin
  4. if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then
  5. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10,))';
  6. elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or
  7. 'VARCHAR2' = 'VARCHAR2' then
  8. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))';
  9. else
  10. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)';
  11. end if;
  12. commit;
  13. end;
  14.  
  15. -- Make GC_NABID field for Next Action By Dropdown
  16.  
  17. begin
  18. if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then
  19. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(,))';
  20. elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or
  21. 'NUMBER' = 'VARCHAR2' then
  22. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())';
  23. else
  24. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)';
  25. end if;
  26. commit;
  27. end;
@H_403_3@当我分别运行这两个查询时,没有问题.但是,当如上所示一起运行时,Oracle在启动第二个语句时给出了一个错误

  1. Error report:
  2. ORA-06550: line 15,column 1:
  3. PLS-00103: Encountered the symbol "BEGIN"
  4. 06550. 00000 - "line %s,column %s:\n%s"
  5. *Cause: Usually a PL/sql compilation error.
  6. *Action:
@H_403_3@我假设这意味着第一个语句没有正确终止…我是否应该在语句之间放置任何内容以使其正常工作?

Oracle一次可以使用一个sql语句或PL / sql匿名块. (与sql Server不同,除了一次批处理外.)因此,您有几个选择. @H_403_3@>将两个匿名块包装在另一个匿名块中:

  1. begin
  2. -- Make GC_NAB field for Next Action By Dropdown
  3. begin
  4. if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then
  5. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10,))';
  6. elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or
  7. 'VARCHAR2' = 'VARCHAR2' then
  8. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))';
  9. else
  10. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)';
  11. end if;
  12. commit;
  13. end;
  14. -- Make GC_NABID field for Next Action By Dropdown
  15. begin
  16. if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then
  17. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(,))';
  18. elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or
  19. 'NUMBER' = 'VARCHAR2' then
  20. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())';
  21. else
  22. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)';
  23. end if;
  24. commit;
  25. end;
  26. end;
@H_403_3@>告诉您正在使用的工具将PL / sql提交给Oracle以单独发送两个块.如何做到这一点将是特定工具.在sql * PLUS中,一行/一行将完成此任务:

  1. -- Make GC_NAB field for Next Action By Dropdown
  2. begin
  3. if 'VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')>0 then
  4. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10,))';
  5. elsif ('VARCHAR2' = 'NUMBER' and length('VARCHAR2')>0 and length('')=0) or
  6. 'VARCHAR2' = 'VARCHAR2' then
  7. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2(10))';
  8. else
  9. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NAB VARCHAR2)';
  10. end if;
  11. commit;
  12. end;
  13. /
  14. -- Make GC_NABID field for Next Action By Dropdown
  15. begin
  16. if 'NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')>0 then
  17. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER(,))';
  18. elsif ('NUMBER' = 'NUMBER' and length('NUMBER')>0 and length('')=0) or
  19. 'NUMBER' = 'VARCHAR2' then
  20. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER())';
  21. else
  22. execute immediate 'alter table "SERVICEMAIL6"."ETD_GUESTCARE" add(GC_NABID NUMBER)';
  23. end if;
  24. commit;
  25. end;
  26. /

猜你在找的Oracle相关文章