声明变量的 PL/SQL 编译错误

Posted

技术标签:

【中文标题】声明变量的 PL/SQL 编译错误【英文标题】:PL/SQL compilation error with declaring variable 【发布时间】:2018-03-15 14:11:32 【问题描述】:

我正在尝试创建一个基本的 PL/SQL 查询,其中我使用某个 SKU 作为参数,这样我就可以引用它而无需每次都输入 sku。

编译我的代码时出现错误:

错误报告: ORA-06550:第 6 行,第 1 列: PLS-00428:此 SELECT 语句中应有一个 INTO 子句 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

这是我的代码:

declare
myitem number (20);
begin 
myitem := 1000956;

select f.order_no
from fdt_maptool f
where f.item = myitem;

end; 
/

我认为这可能与我使用 VARCHAR(20) 而不是 NUMBER 有关,所以我也尝试了。

declare
myitem number;
begin 
myitem := 1000956;

select f.order_no
from fdt_maptool f
where f.item = myitem;

end; 
/

然后收到这个错误:

错误报告: ORA-06550:第 6 行,第 1 列: PLS-00428:此 SELECT 语句中应有一个 INTO 子句 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

我对 PL/SQL 还很陌生,所以请放轻松!

【问题讨论】:

您需要将查询的结果选择成一个变量。例如。 select f.order_no into v_order_no from ...,假设 f.item 是唯一列。 我实际上没有这个数据库的行政许可,它不会让我在任何数据库上创建/删除/插入/等等。这是设置引用变量的唯一方法吗? 如果您可以从表中进行选择,那么您可以创建一个匿名 PL/SQL 块,其中包含您可以选择的变量。尽管如果您只想运行具有不同参数的可重复查询,那么您可能只需要 sql 语句和 ...where f.item = :p_item...where f.item = &item 的 where 子句。 在开头的声明语句中声明了is之后,有没有办法只使用&myitem? 你想用这个过程实现的究竟是什么,而你不能用直接的 sql 语句来实现? 【参考方案1】:

在PLSQL中你需要选择进入

declare
   myitem number(20);
   myorder number(20);
begin 
   myitem := 1000956;

   select f.order_no
   into myorder
   from fdt_maptool f
   where f.item = myitem;

end; 
/

现在有两个标准的事情可能会出错。您可能找不到一条记录,或者您可能找到多条记录。您需要异常处理程序来处理这些情况。

declare
   myitem number(20);
   myorder number(20);
begin 
   myitem := 1000956;

   select f.order_no
   into myorder
   from fdt_maptool f
   where f.item = myitem;

exception
   when no_data_found then
    dbms_output.put_line('No record with this ID');

   -- Only needed when not selecting a unique column.
   when too_many_rows then
    dbms_output.put_line('More than one record with this ID');

end; 
/

请注意,too_many_rows 异常通常已经被您选择的 ID 列定义了唯一约束这一事实所涵盖。

【讨论】:

谢谢你这完美的作品!现在,我还有一个问题。是否可以从这些数据中查看多个表,而不是只带回一个 order_no?我尝试使用“select *”,但它不起作用。

以上是关于声明变量的 PL/SQL 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

编译时PL / Sql问题

PL/SQL 过程编译错误

PL/SQL:使用编译错误创建的函数 [关闭]

PL/SQL 编译失败,没有错误消息

PL/SQL 编译错误

错误:PL/SQL:编译单元分析已终止?