在SQL查询中使用PL/SQL表
我有一个简单的select查询,如下所示,它只有两列:在SQL查询中使用PL/SQL表,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个简单的select查询,如下所示,它只有两列: SELECT a, b FROM table; 我随身携带一些映射数据,如下所示: if a=1 and b=1 then c=100 if a=1 and b=2 then c=200 if a=2 and b=1 then c=300 and so on. 现在,我需要创建一个查询,以便获得如下输出: 1,1,100 1,2,200 2,1,300 and so on 这里我不想创建一个表并存储映射数据。我可以在PL/SQL中创建
SELECT a, b FROM table;
我随身携带一些映射数据,如下所示:
if a=1 and b=1 then c=100
if a=1 and b=2 then c=200
if a=2 and b=1 then c=300
and so on.
现在,我需要创建一个查询,以便获得如下输出:
1,1,100
1,2,200
2,1,300
and so on
这里我不想创建一个表并存储映射数据。我可以在PL/SQL中创建任何数据结构来存储它
我怎样才能做到这一点
PS:我尝试使用PL/SQL表和内部连接创建这个映射数据。但我意识到PL/SQL表不能用于SQL查询
我正在使用Oracle 11g。您可以在查询中动态生成列c
输出
SELECT a, b,
case when a=1 and b=1 then 100
a=1 and b=2 then 200
a=2 and b=1 then 300
end as c
FROM table;
您可以在查询中动态生成列c
输出
SELECT a, b,
case when a=1 and b=1 then 100
a=1 and b=2 then 200
a=2 and b=1 then 300
end as c
FROM table;
您可以使用CASE
语句来测试该值。下面查询中的extraWHERE
子句的目的是稍微加快查询速度,因为它只测试筛选条件中存在的值
SELECT a, b,
CASE WHEN a = 1 AND b = 1 THEN 100
WHEN a = 1 AND b = 2 THEN 200
WHEN a = 2 AND b = 1 THEN 300
END c
FROM tableName
WHERE a IN (1,2) AND
b IN (1,2)
但是,如果要在所有记录中运行,只需删除WHERE
子句。可以使用CASE
语句来测试值。下面查询中的extraWHERE
子句的目的是稍微加快查询速度,因为它只测试筛选条件中存在的值
SELECT a, b,
CASE WHEN a = 1 AND b = 1 THEN 100
WHEN a = 1 AND b = 2 THEN 200
WHEN a = 2 AND b = 1 THEN 300
END c
FROM tableName
WHERE a IN (1,2) AND
b IN (1,2)
但是,如果要在所有记录中运行,可以删除WHERE
子句。什么是“PL/SQL表”?PL/SQL表不能用于SQL查询
是的,它们可以。您只需要具有全局类型创建权限什么是“PL/SQL表”?PL/SQL表不能用于SQL查询
yes它们可以。您只需要拥有全局类型创建权限