问题描述
前两天写了一篇如何在SQLPLUS中粘贴SQL语句,但是改方法对于SQL有效,对于PL/SQL语句则存在一些小问题。
SQLPLUS小技巧带行号SQL的粘贴:http://yangtingkun.net/?p=1167
还是在sqlplus中粘贴带行号的问题,对于PL/SQL,之前给出的方法存在问题:
SQL> DECLARE 2 V_NUM NUMBER; 3 BEGIN 4 FOR I IN 1..10000 LOOP 5 NULL; 6 END LOOP; 7 END; 8 / PL/SQL PROCEDURE successfully completed. SQL> DECLARE 2 . SQL> 2 V_NUM NUMBER; SQL> 3 BEGIN SQL> 4 FOR I IN 1..10000 LOOP SQL> 5 NULL; SQL> 6 END LOOP; SQL> 7 END; SQL> R 1 DECLARE 2 V_NUM NUMBER 3 BEGIN 4 FOR I IN 1..10000 LOOP 5 NULL 6 END LOOP 7* END BEGIN * ERROR at line 3: ORA-06550: line 3, COLUMN 2: PLS-00103: Encountered the symbol "BEGIN" WHEN expecting one OF the following: := . ( @ % ; NOT NULL range DEFAULT CHARACTER The symbol ";" was substituted FOR "BEGIN" TO continue. ORA-06550: line 6, COLUMN 2: PLS-00103: Encountered the symbol "END" WHEN expecting one OF the following:
专家解答
其实导致问题的根源很简单,就是分号;造成的。对于SQL语句,分号作为语句的结束符,而对于PL/SQL语句则不然,因此在粘贴的过程中,所有的分号丢失,造成了PL/SQL语句的错误。
解决这个问题很简单,方法和粘贴SQL并无差别,唯一需要做的是,在粘贴PL/SQL代码前将SQL语句的终结符改为/:
SQL> SHOW SQLT sqlterminator ";" (hex 3b) SQL> SET SQLT '/' SQL> DECLARE 2 . SQL> 2 V_NUM NUMBER; SQL> 3 BEGIN SQL> 4 FOR I IN 1..10000 LOOP SQL> 5 NULL; SQL> 6 END LOOP; SQL> 7 END; SQL> R 1 DECLARE 2 V_NUM NUMBER; 3 BEGIN 4 FOR I IN 1..10000 LOOP 5 NULL; 6 END LOOP; 7* END; PL/SQL PROCEDURE successfully completed.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。