0

我是 Oracle sql 的新手。我从网上获得了一段代码,并将其粘贴到 sqlfiddle ( http://sqlfiddle.com/ ) 中:

对于架构,我创建了一个临时表,它将在 sql 查询中使用:

CREATE Global Temporary TABLE temp
 (id number
 ,x number)
 ,y CHAR(50))
 ON COMMIT DELETE ROWS;

我单击了构建架构,它告诉我“架构就绪”。

然后我在右侧窗格中粘贴以下来自 Oracle 官方网站的查询:

-- available online in file 'sample1'
DECLARE
   x NUMBER := 100;
BEGIN
   FOR i IN 1..10 LOOP
      IF MOD(i,2) = 0 THEN     -- i is even
         INSERT INTO temp VALUES (i, x, 'i is even');
      ELSE
         INSERT INTO temp VALUES (i, x, 'i is odd');
      END IF;
      x := x + 100;
   END LOOP;
   COMMIT;
END;

当我按下运行 sql 时,它返回错误:

ORA-06550:第 3 行,第 18 列:PLS-00103:在预期以下之一时遇到符号“文件结尾”:* & = - + ; </ > at in is mod 余数 not rem <> or != or ~= >= <= <> and or like2 like4 likec || 多集成员子多集

4

1 回答 1

4

您需要将默认查询终止符([;])更改为其他内容,;并且您可能需要在代码块之间添加此分隔符和新行:

在此处输入图像描述

SqlFiddleDemo

DECLARE
   x NUMBER := 100;
BEGIN
   FOR i IN 1..10 LOOP
      IF MOD(i,2) = 0 THEN     
         INSERT INTO temp VALUES (i, x, 'i is even');
      ELSE
         INSERT INTO temp VALUES (i, x, 'i is odd');
      END IF;
      x := x + 100;
   END LOOP;
   COMMIT;
END;

那是怎么回事 [ ; ] 每个面板下的按钮?

这个不起眼的小按钮决定了每个面板中的查询在发送到数据库之前如何分解。此按钮会弹出一个下拉列表,其中列出了不同的“查询终止符”。查询终止符用作指示(当出现在行尾时)当前语句已结束的标志。终结符不会被发送到数据库;相反,它只是指出在执行查询之前我应该​​如何解析文本。

通常,您不需要触摸此按钮。此功能的主要价值在于定义存储过程。这是因为通常情况下,在存储过程的主体定义中,您可能希望以分号结束一行(通常是这种情况)。由于我的默认查询终止符也是分号,因此我没有明显的方法可以看出您的存储过程的分号实际上并不是查询的结尾。留下分号终止符,我会将您的过程定义分解为不正确的部分,并且肯定会导致错误。将查询终止符更改为分号以外的内容可以避免此问题。

于 2015-12-22T17:18:24.393 回答