无法在 Oracle SQL(SQL Fiddle)中声明变量

Posted

技术标签:

【中文标题】无法在 Oracle SQL(SQL Fiddle)中声明变量【英文标题】:Can't declare a variable in Oracle SQL(SQL Fiddle) 【发布时间】:2020-09-13 18:15:12 【问题描述】:

当我运行声明查询时,它总是给我错误。

DECLARE
   the_variable date;
BEGIN
   SELECT MIN("Start Date") INTO the_variable FROM "Employee_Master";
END;

ORA-06550:第 2 行,第 20 列:PLS-00103:遇到符号 预期以下之一时的“文件结尾”: := 。 ( @ % ; 不是 具有默认字符的空范围。

我不确定问题出在哪里。

【问题讨论】:

看起来 SQLFiddle 不支持 PL/SQL。即使在简单的begin null; end; 上也会失败 呵呵,但是如果我在下一行添加/ 就可以了 如果我将所有 pl/sql 块放在一个块中,它就可以工作,即:declare dt date; begin dt:=date'2020-01-01'; end;/ 在下一行 【参考方案1】:

对我来说没问题:

SQL> create table "Employee_Master" ("Start Date" date);

Table created.

SQL> insert into "Employee_Master" values (sysdate);

1 row created.

SQL> declare
  2    the_variable date;
  3  begin
  4    select min("Start Date") into the_variable
  5      from "Employee_Master";
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL>

虽然,为什么,哦,你为什么要让你的生活变得悲惨?使用 Oracle 时避免使用双引号。如果你这样做,你总是必须在创建过程中使用双引号和匹配的字母大小写来引用表(和列)完全正确

默认情况下,Oracle 将 所有内容 存储为大写,但您可以以任何您想要的方式引用这些对象(大写、小写、混合大小写 - 无关紧要)。但是,正如我所说,使用双引号 - 需要完全匹配。


顺便说一句,您附上的屏幕截图显示了很多什么都没有,只有一点点有什么。不能截个更好的截图吗?

【讨论】:

感谢您的回复。抱歉截图,我删除了它。 col 名称已经固定,并且其中有一个空格,所以我不得不使用双引号。我正在使用 SQL Fiddle oracle,但它总是给我错误。 sqlfiddle.com/#!4【参考方案2】:

在 SQL Fiddle 网站上,您需要告诉它您将使用 PL/SQL,并且语句将以 / 终止符(而不是 ; 分号)结束。为此,您需要单击“查询终止符”按钮(“运行 SQL”和“编辑全屏”按钮的右侧)并将其从 [;] 更改为 [/] .

然后就可以了:

SQL Fiddle

Oracle 11g R2 架构设置

CREATE TABLE Employee_Master ( Start_Date DATE );
    
INSERT INTO Employee_Master ( Start_Date ) VALUES ( SYSDATE );

查询 1

DECLARE
   the_variable date;
BEGIN
   SELECT MIN(Start_Date) INTO the_variable FROM Employee_Master;
END;
/

Results

【讨论】:

以上是关于无法在 Oracle SQL(SQL Fiddle)中声明变量的主要内容,如果未能解决你的问题,请参考以下文章

SQL(SQL/Oracle)使用序列从选择语句中插入值

sql SQL Fiddle的示例表模式

SQL 嵌套查询作业 SQL Fiddle

在 phpmyadmin 和 SQL Fiddle 上执行时相同 SELECT 查询的不同结果

T-SQL - 连接多个表会导致重复行

无法在 Oracle 匿名块中调用和执行 .sql 脚本文件