Sql 如何在查询前声明变量并为其赋值?
我有一个复杂的查询,必须使用一个名为SubUnitRate的数字。此变量来自另一个具有特殊条件的表。简言之,我们有:Sql 如何在查询前声明变量并为其赋值?,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个复杂的查询,必须使用一个名为SubUnitRate的数字。此变量来自另一个具有特殊条件的表。简言之,我们有: DECLARE SUBUNITRATE NUMBER; BEGIN SELECT NVL (NULLIF (CU.SUBUNITRATE, 0), 1) INTO SUBUNITRATE FROM CURRENCYS CU JOIN ACCOUNTS ACC ON CU.ID = ACC.CURRENCY WHERE ACC.ID = :ACCOUNTID;
DECLARE
SUBUNITRATE NUMBER;
BEGIN
SELECT NVL (NULLIF (CU.SUBUNITRATE, 0), 1)
INTO SUBUNITRATE
FROM CURRENCYS CU
JOIN ACCOUNTS ACC ON CU.ID = ACC.CURRENCY
WHERE ACC.ID = :ACCOUNTID;
END;
SELECT SUBUNITRATE * 100 FROM DUAL;
我的目标是获得简单情况下的结果:
SELECT SUBUNITRATE * 100 FROM DUAL;
但是这怎么可能呢?PL/SQL块不能将查询结果作为查询返回。相反,您可以将结果打印出来 那么,这是你想要的吗
DECLARE
SUBUNITRATE NUMBER;
BEGIN
SELECT NVL(NULLIF(CU.SUBUNITRATE, 0), 1)
INTO SUBUNITRATE
FROM CURRENCYS CU JOIN
ACC
ON CU.ID = ACC.CURRENCY
WHERE ACC.ID = :ACCOUNTID;
DBMS_OUTPUT.PUT_LINE(SUBUNITRATE * 100)
END;
PL/SQL块不能将查询结果作为查询返回。相反,您可以将结果打印出来 那么,这是你想要的吗
DECLARE
SUBUNITRATE NUMBER;
BEGIN
SELECT NVL(NULLIF(CU.SUBUNITRATE, 0), 1)
INTO SUBUNITRATE
FROM CURRENCYS CU JOIN
ACC
ON CU.ID = ACC.CURRENCY
WHERE ACC.ID = :ACCOUNTID;
DBMS_OUTPUT.PUT_LINE(SUBUNITRATE * 100)
END;
假设您希望在同一查询中多次使用SUBUNITRATE的值,则可以使用WITH子句:
with cte as (
select case
when CU.SUBUNITRATE = 0 then 1
else CU.SUBUNITRATE
end as SUBUNITRATE
FROM CURRENCYS CU
JOIN ACCOUNTS ACC ON CU.ID = ACC.CURRENCY
WHERE ACC.ID = :ACCOUNTID
)
select cte.SUBUNITRATE * 100
from cte;
假设您希望在同一查询中多次使用SUBUNITRATE的值,则可以使用WITH子句:
with cte as (
select case
when CU.SUBUNITRATE = 0 then 1
else CU.SUBUNITRATE
end as SUBUNITRATE
FROM CURRENCYS CU
JOIN ACCOUNTS ACC ON CU.ID = ACC.CURRENCY
WHERE ACC.ID = :ACCOUNTID
)
select cte.SUBUNITRATE * 100
from cte;
不需要PL.APC的解决方案,简化后的解决方案形式可以直接用于您的查询,无论您在哪里说…=比如说改为从cte中选择sur-包括括号:
with cte_prelim as (select subunitrate from ... etc.),
cte (sur) as select case when subunit rate is null or subunitrate = 0 then 100
else subunitrate * 100 end from cte_prelim)
select... (your query where you need to use the value)
不需要PL.APC的解决方案,简化后的解决方案形式可以直接用于您的查询,无论您在哪里说…=比如说改为从cte中选择sur-包括括号:
with cte_prelim as (select subunitrate from ... etc.),
cte (sur) as select case when subunit rate is null or subunitrate = 0 then 100
else subunitrate * 100 end from cte_prelim)
select... (your query where you need to use the value)
正如我所说,这个变量必须用于更复杂的查询,简化为“SUBUNITRATE*100”。所以我需要在以后多次使用它。正如我所说的,这个变量必须在更复杂的查询中使用,简化为“SUBUNITRATE*100”。因此,我需要在以后多次使用它。也许你可以创建一个存储功能SubmitrateArchar2 AccountId,或者根本不使用PL/SQL,而是将其作为子查询。通过简化查询,我们很难理解你想要实现的目标,也很难使用它来帮助你。请提供您实际需求的实际说明。将其设为函数并返回*100?也许你可以创建一个存储功能SubmitrateArch2 AccountId,或者根本不使用PL/SQL,而是将其作为子查询。通过简化你的查询,我们很难理解你想要实现什么,也很难使用它来帮助你。请提供您实际需求的实际说明。将其设为函数并返回*100?