Oracle 更新和下一步如何选择PL/SQL

Oracle 更新和下一步如何选择PL/SQL,oracle,plsql,Oracle,Plsql,我需要做一个表的更新,下一个我想看到我的行动的结果。如何使用PL/SQL?!我有这个变种,但不起作用 declare switcher VARCHAR(20); --step one - update begin switcher := &faid; update table_one.field t1 set t1.str_value = switcher where t1.name = 'NAME_1'; commit; end; --step two - sel

我需要做一个表的更新,下一个我想看到我的行动的结果。如何使用PL/SQL?!我有这个变种,但不起作用

declare 
 switcher VARCHAR(20);
--step one - update
begin
  switcher := &faid;
  update table_one.field t1
  set t1.str_value = switcher
  where t1.name = 'NAME_1';
commit; 
end;
--step two - select 
begin
  select * from table_one.field t1
  where t1.name = 'NAME_1'
end

不能使用PL/SQL块中的SELECT返回结果。删除选择之前的
begin
,以及选择之后的
end

您也不能在
UPDATE
语句的表中包含列名(而不是“字段”)。这些列在
SET
子句中引用。
FROM
子句中的表引用也是如此

您还需要一个不同的字符来结束PL/SQL块。在Oracle世界中(
sqlplus
,SQL开发人员)
/
字符

declare 
  switcher VARCHAR(20);
--step one - update
begin
  switcher := &faid;

  update table_one -- only the table name here
    set str_value = switcher  -- a column can be referenced here
  where name = 'NAME_1'; -- and a column can be referenced here

  commit; 
end;
/

select * 
from table_one t1 -- no "field" after the table name here either
where t1.name = 'NAME_1';

但是,您并不真正需要PL/SQL来完成整个过程。假设SQL*Plus(或SQL Developer)也适用于以下情况:

update table_one
  set str_value = &faid
where name = 'NAME_1';
commit; 

select * 
from table_one t1
where t1.name = 'NAME_1';

您使用的是哪个Oracle版本?如果没有INTO,则无法在过程中执行
select*from
。在12c及以上版本中,您可以使用
DBMS\u SQL。RETURN\u RESULT
我想如果您想在
pl/SQL
中“查看”结果,那么您可以使用
DBMS\u output。put\u line
打印出包含结果的变量,但首先需要用select语句的结果填充这些变量。您的步骤2实际上是一个
sql
而不是
pl/sql
,这就是为什么它“不起作用”……您的命名约定有些奇怪。表名真的是属于用户表的字段吗?听起来好像它是一个名为table_ONE的表,并且有一个名为FIELD的列,但是。。。谁知道呢?让我们假设更新实际上会起作用。显示这些值的最简单方法(如果表不大并且没有很多列)是将游标逐列显示为循环和DBMS_OUTPUT.PUT_LINE。否则,您必须返回refcursor(例如)。但是,只是为了看看你做了什么?值得吗?为什么不在SQL层中简单地运行SELECT呢?