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