暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQLPLUS小技巧带行号PLSQL的粘贴

老杨 2019-04-18
1605

问题描述

前两天写了一篇如何在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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论