【问题标题】:Execution error Encountered the symbol "IF" when expecting one of the following执行错误 在预期以下情况之一时遇到符号“IF”
【发布时间】:2021-03-09 22:38:46
【问题描述】:

SQL查询执行过程中发生错误

Reason:
SQL Error [6550] [65000]: ORA-06550: line 11, column 1:
PLS-00103: Encountered the symbol "IF" when expecting one of the following:

   := . ( % ;
The symbol ";" was substituted for "IF" to continue.
ORA-06550: line 31, column 15:
PLS-00103: Encountered the symbol "(" when expecting one of the following:

   , from

------------代码从这里开始--------

DECLARE
    TOTALCOUNT int ;
BEGIN
    SELECT
    count(*) AS cnt
INTO
    TOTALCOUNT
FROM
    abc;

dbms_output.put_line (TOTALCOUNT) ;
END ;

DECLARE
    TOTALPTCOUNT int ;
BEGIN
    SELECT
    count(*) AS cnt
INTO
    TOTALPTCOUNT
FROM
    ghi g;

dbms_output.put_line (TOTALPTCOUNT) ;
END ;

DECLARE
    TOTALOVERALLCOUNT int ;
BEGIN   
    SELECT 
    ((TOTALPTCOUNT/TOTALCOUNT) * 100) AS dpc
INTO
    TOTALOVERALLCOUNT FROM dual ;
dbms_output.put_line (TOTALOVERALLCOUNT) 

IF:
    TOTALOVERALLCOUNT >= 10 THEN

"my logic here"

end 
if ;

【问题讨论】:

  • 您尚未指定您使用的 DBMS。查看您的代码是否应该有“;”在 dbms_output.put_line (TOTALOVERALLCOUNT) 之后??
  • 当您遇到 Oracle 错误时,它不是 SQL Server。请只标记一个 RDBMS。

标签: oracle plsql logical-operators declare


【解决方案1】:

前两个 PL/SQL 块没问题(就语法而言)。不过,请考虑用斜杠终止它们。

但是,第 3 块完全不正确:

  • IF 不能将字符串括在双引号中(您可能应该将“我的逻辑”放在评论中并使用 NULL; 命令,只是为了使其编译
  • 变量不应该有冒号(这里没有使用任何绑定)
  • 要计算它的值,您不必SELECT FROM DUAL - 只需计算
  • 另外,END 不见了。

此外,由于第三个块使用前两个中声明的变量,所以它不起作用 - 它们在这里是未知的。您可能应该只有一个 DECLARE 部分,声明所有 3 个变量,将所有“逻辑”放入单个 PL/SQL 块中。像这样的:

DECLARE
   totalcount         INT;
   totalptcount       INT;
   totaloverallcount  INT;
BEGIN
   SELECT COUNT (*) INTO totalcount FROM abc;

   DBMS_OUTPUT.put_line (totalcount);

   SELECT COUNT (*)
     INTO totalptcount
     FROM ghi g;

   DBMS_OUTPUT.put_line (totalptcount);

   totaloverallcount := (totalptcount / totalcount) * 100;

   DBMS_OUTPUT.put_line (totaloverallcount);

   IF totaloverallcount >= 10                  --> your IF is completely wrong
   THEN
      NULL;
   -- "my logic here"
   END IF;
END;
/

【讨论】:

  • 感谢@Littlefoot。我最终在一个块中将所有变量一起声明并且我让它工作但是我的问题仍然是我希望在适用时满足 IF 条件然后执行“我的逻辑”部分和输出但是我无法让它工作.我也尝试过使用 case 语句而不是 IF 但它不起作用。有什么建议吗?这就是我修改后的代码的样子
  • 感谢@Littlefoot。我最终将所有变量一起声明在一个块中,我让它工作,但我的问题仍然是 IF 语句不起作用并抛出错误。我也尝试使用 case 语句而不是 IF 但它不起作用。有什么建议吗?当我分别运行声明块和我的逻辑块时,它们运行时没有任何错误,所以我想我没有使用 IF 正确加入它们,所以如果你能纠正我做错了什么或如何在我的逻辑中正确应用 IF 将不胜感激。 TIA
  • 这就是我修改后的代码的样子 DECLARE TOTALCOUNT int ; TOTALPTCOUNT 整数; TOTALOVERALLCOUNT int ; BEGIN SELECT count() AS cnt INTO TOTALCOUNT FROM abc; dbms_output.put_line (TOTALCOUNT) ; SELECT count() AS cnt INTO TOTALPTCOUNT FROM ghi g; dbms_output.put_line (TOTALPTCOUNT) ; TOTALOVERALLCOUNT:= ((TOTALPTCOUNT / TOTALCOUNT) * 100) ; dbms_output.put_line (TOTALOVERALLCOUNT) ; IF TOTALOVERALLCOUNT > 1 THEN “我的逻辑” END IF ;结束;
  • 唯一明显错误的是双引号字符串"My logic here"。你应该在那里放一些代码,即“你的逻辑”。我不知道那个逻辑是什么——这就是为什么我在那里放了一个null; 命令。
猜你喜欢
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
相关资源
最近更新 更多