【问题标题】:Oracle basic multi-statement blockOracle 基本多语句块
【发布时间】:2018-07-17 21:09:07
【问题描述】:

在 SQL Server 中,可以执行 SSMS 中的多个语句。在 Oracle(使用 toad)中,我不知道为什么在做同样的事情时会收到某些错误。例如,我假设 Oracle 要求将它们放在一个块中,但我仍然得到以下信息:

DECLARE
  v_datetime TIMESTAMP := SYSDATE;
BEGIN
  insert into sometable_log values (v_datetime, 'this is a test ',1);
  select * from sometable_log where event_dt = v_datetime;
END;

产生:

[错误] 执行 (5:1): ORA-06550: 第 4 行第 1 列: PLS-00428: an 此 SELECT 语句中应包含 INTO 子句

为什么需要使用 into 子句?有人可以帮我理解这是什么吗?

谢谢!

【问题讨论】:

  • 在 PL/SQL 中,您需要一个 into 子句,以便您可以捕获值以进行进一步处理。如果您想从 PL/SQL 块向调用者隐式返回 ref 游标,请参阅 stackoverflow.com/a/40360471/230471
  • 如果您只想在 Toad 中一个接一个地运行两个命令,而不是在 PL/SQL 中编写任何代码,请查阅 Toad 文档(我不使用它)。
  • 您似乎并不真的想要一个 PL/SQL 块。说出运行普通 SQL 语句时遇到的错误可能会更有用Maybe this?

标签: oracle


【解决方案1】:

在执行代码块时,Oracle 期望 select 命令应该有一些类似代码的效果。这就是为什么它要你添加 into 子句。

要做你需要的,只需将选择语句移到 PL/SQL 开始/结束块之外。

【讨论】:

  • 谢谢你,马克。如果我这样做,那么它将无法识别 v_datetime 变量。那么,Oracle 不能像 Sql Server 那样批量工作的区别是什么? PL/SQL 和 Sql Server 的工作方式似乎存在根本区别,在我看来,PLSQL 一次只能以批处理方式处理一条语句。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多