声明变量的 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 编译错误的主要内容,如果未能解决你的问题,请参考以下文章