【问题标题】:Oracle PLSQL update table where in Associative Array?Oracle PLSQL 更新表在关联数组中的位置?
【发布时间】:2015-08-16 05:55:48
【问题描述】:

我想在存储过程中更新与 id 匹配的所有记录。 现在,这个 id 列表正在作为 varchar(关联数组)表传入..

CREATE TYPE varcharArray AS TABLE OF VARCHAR2(1000) index by ...

proc 声明类似于

PROCEDURE testProc (p_IDs in varcharArray, p_Success out Number)

以及proc中的update语句

update testtable 
set col = 'val' 
where id in (select column_value from table(p_IDs);

这似乎不起作用。所以我不得不在数组中做一个循环并为每个 ID 更新。

但我真的很希望使用 where in 子句对其进行更新。任何帮助都会很棒。

PS:id字段是一个数字。

【问题讨论】:

  • CREATE TYPE 后面的“...”是什么意思?
  • 没什么,会更新的。
  • 好的,那么它实际上不是关联数组,它是“嵌套表”。关联数组是一种 PL/SQL 类型,您可以在其中指定索引类型,例如“pls_integer 索引”或“varchar2(40) 索引”
  • 其实是有索引的。对于那个很抱歉。已更新相关问题。
  • 但是create type是错误的,因为不能在数据库中创建关联数组,只能在PL/SQL块中声明。

标签: plsql associative-array plsqldeveloper oracle12c where-in


【解决方案1】:

它对我有用:

create table testtable (col varchar2(10), id varchar2(1000));
insert into testtable values (null, 'AAA');
insert into testtable values (null, 'BBB');
insert into testtable values (null, 'CCC');
insert into testtable values (null, 'DDD');
commit;


create or replace PROCEDURE testProc (p_IDs in varcharArray) is
begin
update testtable
set col = 'val'
where id in (select column_value from table(p_IDs));
end;
/

exec testproc(p_ids=>varcharArray('AAA','DDD'));

SQL> select * from testtable;

COL        ID
---------- ----------
val        AAA
           BBB
           CCC
val        DDD

【讨论】:

  • 如何创建表 testtable (col varchar2(10), id number);有没有办法转换 varcharArray .. 类似: where in (select to_number(column_value) from table(p_IDs))
  • 哦,我只是在猜测.. 我不知道有一个 to_number() 演员表。我试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2015-07-01
  • 2013-09-14
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多