【问题标题】:ORA-06550: line 10, column 14: PLS-00201: identifier 'UPDATE TEST2 SET ITEM' must be declaredORA-06550:第 10 行,第 14 列:PLS-00201:必须声明标识符“UPDATE TEST2 SET ITEM”
【发布时间】:2022-01-06 04:15:45
【问题描述】:
create table test1(item varchar2(10),level1 number(10,0),des varchar2(10));

create table test2(l_update varchar2(2000),l_item varchar2(10));


declare 

l_item varchar2(10);
l_update varchar2(2000);

cursor p1 IS
select * from TEST1;

Begin
l_update := "UPDATE TEST2 SET ITEM" ;

open p1;
fetch p1 into l_item;

insert into test2 values('l_update','123');

close p1;

END;

我收到此错误:

ORA-06550:第 10 行,第 14 列:
PLS-00201:必须声明标识符“UPDATE TEST2 SET ITEM”

【问题讨论】:

  • l_update := "UPDATE TEST2 SET ITEM" ; 应该是带有单引号的 l_update := 'UPDATE TEST2 SET ITEM'; 。 l_item 和 l_update 从未使用过。 insert into test2 values('l_update','123'); 插入静态值。

标签: sql oracle plsql


【解决方案1】:

正如评论,您应该使用单引号并从 insert 语句中删除它们(单引号)。

但这还不是全部:test1 包含 3 列;您无法将 3 列提取到单个 l_item 变量中(您还缺少两个变量);你宁愿声明一个游标变量,例如l_curvar c1%rowtype;.

此外,如果test1 包含多行怎么办?您总是会获取第一个(随机)的,做 something 并关闭光标。

更好/更简单的选择是使用游标FOR 循环并让Oracle 为您完成大部分“脏”工作(因为您不必声明游标变量,打开游标,从中获取, (如果您处于循环中 - 退出循环),请关闭光标)。

类似于以下示例。

测试表:

SQL> create table test1
  2    (item varchar2(10), level1 number(10,0), des varchar2(10));

Table created.

SQL> create table test2
  2    (l_update varchar2(2000), l_item varchar2(10));

Table created.

SQL> insert into test1 (item, level1, des) values
  2    ('A', 1, 'Test');

1 row created.

SQL> select * from test1;

ITEM           LEVEL1 DES
---------- ---------- ----------
A                   1 Test

SQL> select * from test2;

no rows selected

代码:

SQL> declare
  2    l_update varchar2(2000);
  3  begin
  4    l_update := 'UPDATE TEST2 SET ITEM';
  5
  6    for cur_r in (select item, level1, des from test1) loop
  7      insert into test2 (l_update, l_item) values
  8        (l_update , cur_r.item);
  9    end loop;
 10  end;
 11  /

PL/SQL procedure successfully completed.

结果:

SQL> select * from test2;

L_UPDATE                                           L_ITEM
-------------------------------------------------- ----------
UPDATE TEST2 SET ITEM                              A

SQL>

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2021-12-22
    相关资源
    最近更新 更多