oracle - 如何在SELECT FROM语句中使用表类型?

标签 oracle select row

这个问题与this差不多

在包头中:
声明以下行类型:

  TYPE exch_row IS RECORD(
    currency_cd VARCHAR2(9),
    exch_rt_eur NUMBER,
    exch_rt_usd NUMBER);

并且此表类型:
  TYPE exch_tbl IS TABLE OF exch_row INDEX BY BINARY_INTEGER;

添加了一个变量:
exch_rt exch_tbl;

在包体内:

用一些数据填充该表变量。

在程序包主体中的过程中:

我要使用以下语句:
CURSOR c0 IS
  SELECT i.*, rt.exch_rt_eur, rt.exch_rt_usd
  FROM item i, exch_rt rt
  WHERE i.currency = rt.exchange_cd

在Oracle中如何做到这一点?

注释

实际上,我正在寻找MSSQL中的“表变量”解决方案:
DECLARE @exch_tbl TABLE
(
  currency_cd VARCHAR(9),
  exch_rt_eur NUMBER,
  exch_rt_usd NUMBER)
)

并在我的StoredProcedure中使用此表变量。

最佳答案

在SQL中,您只能使用在架构级别定义的表类型(而不是在包或过程级别),并且不能在架构级别定义索引表(关联数组)。所以-您必须像这样定义嵌套表

create type exch_row as object (
    currency_cd VARCHAR2(9),
    exch_rt_eur NUMBER,
    exch_rt_usd NUMBER);

create type exch_tbl as table of exch_row;

然后可以在SQL中使用TABLE运算符使用它,例如:
declare
   l_row     exch_row;
   exch_rt   exch_tbl;
begin
   l_row := exch_row('PLN', 100, 100);
   exch_rt  := exch_tbl(l_row);

   for r in (select i.*
               from item i, TABLE(exch_rt) rt
              where i.currency = rt.currency_cd) loop
      -- your code here
   end loop;
end;
/

关于oracle - 如何在SELECT FROM语句中使用表类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165580/

相关文章:

sql - View 在修改时失去其授权

java - 如何使用 OJDBC 取回生成的 ID?

sql - 如何找出返回不同结果的两个查询之间的差异

Excel 2016 : Insert Row ABOVE find result in table

oracle - 在代理键上使用反向索引的好习惯? (甲骨文)

.net - 在 Entity Framework Code First 中将 Guid 属性映射到 Oracle

php - 从 MYSQL 选择某些 ID 并保存为 PHP Vars

r - 使用 R 选择指定列之后的所有列

r - 如何查找数据框中特定列的哪一行具有最高值?

css - 在 Bootstrap3 行中垂直居中内容?