gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:27:36 31 4
gpt4 key购买 nike

这个问题与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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com